diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce8ea5c..34d1339 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,3 +39,17 @@ jobs: run: | forge test -vvv id: test + + - name: Setup NodeJS 20.5.0 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 #v4.4.0 + with: + node-version: 20.5.0 + + - name: Show NodeJS version + run: npm --version + + - name: Install Project Dependencies + run: npm install + + - name: Run Hardhat Test + run: npx hardhat test diff --git a/.gitignore b/.gitignore index ac3da17..1bb896c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,9 @@ node_modules/ /history /ERCSpecification *.dbg.json -/skills + +# Codex +.codex #drawio *.bkp diff --git a/AGENTS.md b/AGENTS.md index a4f9878..b151852 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,18 +24,19 @@ Modular compliance-rule library for CMTAT / ERC-3643 security tokens. Each rule | `RuleMaxTotalSupply` | Cap minting so total supply never exceeds a maximum | | `RuleIdentityRegistry` | Check ERC-3643 identity registry for participant verification | | `RuleSpenderWhitelist` / `RuleSpenderWhitelistOwnable2Step` | Allow `transferFrom` only when spender is whitelisted; direct transfers are always allowed | -| `RuleERC2980` | ERC-2980 Swiss Compliant rule: whitelist (recipient-only) + frozenlist (blocks sender and recipient); frozenlist takes priority | +| `RuleERC2980` | ERC-2980 Swiss Compliant rule: whitelist (recipient-only) + frozenlist (blocks sender, recipient, and spender for `transferFrom`); frozenlist takes priority | | `RuleERC2980Ownable2Step` | Ownable2Step variant of RuleERC2980 | -| `RuleConditionalTransferLight` | Require operator approval before each transfer | +| `RuleConditionalTransferLight` | Require operator approval before each transfer; bound to exactly one token at a time (`bindToken` reverts if a token is already bound; use `unbindToken` first to migrate) | | `RuleConditionalTransferLightOwnable2Step` | Owner-only approval and execution for conditional transfers | | `AccessControlModuleStandalone` | Base RBAC module; admin implicitly holds all roles | | `MetaTxModuleStandalone` | ERC-2771 meta-transaction support | | `VersionModule` | Implements `IERC3643Version`; returns the contract version string | ## Dependencies (lib/) -- `openzeppelin-contracts` v5.5.0 — `AccessControl`, `Ownable2Step`, `EnumerableSet`, `ERC2771Context` +- `openzeppelin-contracts` v5.6.1 — `AccessControl`, `Ownable2Step`, `EnumerableSet`, `ERC2771Context` +- `openzeppelin-contracts-upgradeable` v5.6.1 - `CMTAT` v3.0.0 — `IERC1404`, `IERC3643`, `IRuleEngine` interfaces -- `RuleEngine` v3.0.0-rc0 — `IRule`, `RulesManagementModule` +- `RuleEngine` v3.0.0-rc2 — `IRule`, `RulesManagementModule` - `forge-std` — Foundry test utilities Remappings are in `remappings.txt`; aliases used in source: `OZ/`, `CMTAT/`, `RuleEngine/`. @@ -66,6 +67,7 @@ Foundry config: `foundry.toml` (solc 0.8.34, EVM prague, optimizer 200 runs). - AccessControl variants must use `onlyRole(ROLE)` in `_authorize*()` methods (avoid direct `_checkRole`). - AccessControl variants treat the default admin as having all roles via `hasRole`, but the admin may not appear in role member enumerations unless explicitly granted. - All rules implement `IERC3643Version` via `VersionModule`; the current version string is `"0.2.0"`. +- **ERC-165 interface IDs**: `type(IFoo).interfaceId` only XORs selectors defined directly on `IFoo` and does NOT include selectors from inherited interfaces. Always use the pre-computed library constants instead: `ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID` (from `CMTAT/library/`), `RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID` (from `CMTAT/library/`), and `RuleInterfaceId.IRULE_INTERFACE_ID` (from `RuleEngine/modules/library/`). If no pre-computed constant exists for an interface, define a flat mock interface that redeclares all functions from the full inheritance tree and use `type(IFooFlattened).interfaceId` to compute the correct value (see `lib/RuleEngine/src/mocks/IRuleInterfaceIdHelper.sol` for the established pattern). - Batch add/remove operations are non-reverting (skip duplicates); single-item operations revert on invalid input. - All `internal` functions should be marked `virtual`. - Do not create git commits; provide commit messages only when requested. diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a0eefa..68490c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,9 +43,61 @@ Custom changelog tag: `Dependencies`, `Documentation`, `Testing` - Update surya doc by running the 3 scripts in [./doc/script](./doc/script) - Update changelog -## v0.2.0 - TBD +## v0.3.0 - -Commit: `TBD` +### Security + +- **H1 fix** — `RuleConditionalTransferLight`: enforced single-token binding by overriding `bindToken` to revert with `RuleConditionalTransferLight_TokenAlreadyBound` if a token is already bound. Eliminates cross-token approval replay and approval-draining attacks. Use `unbindToken` first to migrate to a new token. +- **M1 fix** — Added `IERC7551Compliance` (`0x7157797f`), `IERC3643IComplianceContract` (validation rules), and the full ERC-3643 `ICompliance` ID via flat mock `IERC3643ComplianceFull` (`0x3144991c`) to all `supportsInterface` implementations. Silent `false` on ERC-165 introspection no longer occurs for compliant callers. + +### Added + +- `RuleConditionalTransferLightApprovalBase` — new abstract contract holding the pure approval state machine (approval counts, `approveTransfer`, `cancelTransferApproval`, `approvedCount`, and the `transferred` callback). No ERC-3643 / IRule knowledge. +- `IERC3643ComplianceFull` (`src/mocks/IERC3643ComplianceFull.sol`) — flat mock interface redeclaring all eight ERC-3643 `ICompliance` functions; used to compute the correct ERC-165 ID (`0x3144991c`) since `type(IERC3643Compliance).interfaceId` only XORs directly-defined selectors. + +### Changed + +- `RuleConditionalTransferLightBase` refactored into two layers: `RuleConditionalTransferLightApprovalBase` (state machine) + `RuleConditionalTransferLightBase` (ERC-3643 / IRule compliance integration). Eliminates code duplication between the AccessControl and Ownable2Step variants. +- `RuleConditionalTransferLightOwnable2Step` now inherits `ERC3643ComplianceModule` via the base (consistent with the AccessControl variant); `_authorizeTransferExecution` consolidated into the base and checks `isTokenBound(_msgSender())`. +- `approveAndTransferIfAllowed` no longer takes a `token` parameter — bound token is retrieved directly via `getTokenBound()`. +- `RuleConditionalTransferLightBase.approveAndTransferIfAllowed` now uses OpenZeppelin `SafeERC20.safeTransferFrom` to handle non-standard ERC-20 return behavior safely. +- Removed unused custom error `RuleConditionalTransferLight_TransferFailed` from `RuleConditionalTransferLightInvariantStorage`. +- Custom error `RuleConditionalTransferLight_TokenAddressZeroNotAllowed` renamed to `RuleConditionalTransferLight_TokenNotBound` for clarity. +- `RuleERC2980` and `RuleERC2980Ownable2Step` constructors now include `allowBurn` and whitelist `address(0)` at deployment when enabled. +- `RuleWhitelist` and `RuleWhitelistOwnable2Step` constructors now include `allowMintBurn`; when enabled, `address(0)` is pre-listed at deployment. +- Solidity style guide ordering (type declarations → state variables → events → errors → modifiers → functions; constructor → external → public → internal → private) enforced across all `src/` contracts. +- `supportsInterface` in `RuleConditionalTransferLight` and `RuleConditionalTransferLightOwnable2Step` now advertises `IERC7551Compliance` and the full ERC-3643 `ICompliance` interface ID instead of the narrow `IERC3643IComplianceContract`. +- `supportsInterface` in `RuleTransferValidation` (cascades to all validation rules) now also advertises `IERC7551Compliance` and `IERC3643IComplianceContract`. +- Update contract version to `0.3.0` + +### Dependencies + +- Update RuleEngine to `v3.0.0-rc2`. +- Update OpenZeppelin Contracts to `v5.6.1`. +- Update OpenZeppelin Contracts Upgradeable to `v5.6.1`. + +### Documentation + +- Wake Arena (Ackee Blockchain Security) AI-assisted static analysis report and project feedback added to `doc/security/audits/tools/v0.2.0/`. +- README Security section updated with Wake Arena findings summary table. +- README Access Control section updated to document intentional `DEFAULT_ADMIN_ROLE` implicit-role behaviour, `grantRole` no-op semantics, and off-chain monitoring guidance (I2). +- `RuleERC2980` documentation updated to clarify that a frozen address acting as `transferFrom` spender is also blocked (code 62) (I1). +- `RuleERC2980` documentation and README updated to document burn/redemption behavior and the new constructor `allowBurn` option. +- `RuleWhitelist` documentation and README updated to document constructor `allowMintBurn` and zero-address mint/burn handling. +- README updated to document Hardhat support for optional compilation and smoke testing alongside Foundry-first workflows. +- `CLAUDE.md` / `AGENTS.md` convention added: always use pre-computed library constants for ERC-165 IDs; use a flat mock interface when no constant exists. + +### Testing + +- Added `RuleERC2980` constructor tests covering default burn-blocked behavior and `allowBurn=true` zero-address whitelisting. +- Added `RuleWhitelist` constructor tests covering `allowMintBurn=true` zero-address pre-listing. +- Added a Hardhat smoke test (`test/hardhat/smoke.test.js`) and npm scripts for Hardhat compile/smoke execution. +- Updated `RuleConditionalTransferLightApproveAndTransfer` transfer-failure test to assert OpenZeppelin `SafeERC20` revert semantics. +- Removed now-unused `RuleConditionalTransferLight_TransferFailed` declaration; no behavior change. + +## v0.2.0 - 2026-03-10 + +Commit: [`d72a98a`](https://github.com/CMTA/Rules/commit/d72a98abbba29cd82a7056b59104e82ac65389e7) ### Added diff --git a/CLAUDE.md b/CLAUDE.md index a4f9878..b151852 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,18 +24,19 @@ Modular compliance-rule library for CMTAT / ERC-3643 security tokens. Each rule | `RuleMaxTotalSupply` | Cap minting so total supply never exceeds a maximum | | `RuleIdentityRegistry` | Check ERC-3643 identity registry for participant verification | | `RuleSpenderWhitelist` / `RuleSpenderWhitelistOwnable2Step` | Allow `transferFrom` only when spender is whitelisted; direct transfers are always allowed | -| `RuleERC2980` | ERC-2980 Swiss Compliant rule: whitelist (recipient-only) + frozenlist (blocks sender and recipient); frozenlist takes priority | +| `RuleERC2980` | ERC-2980 Swiss Compliant rule: whitelist (recipient-only) + frozenlist (blocks sender, recipient, and spender for `transferFrom`); frozenlist takes priority | | `RuleERC2980Ownable2Step` | Ownable2Step variant of RuleERC2980 | -| `RuleConditionalTransferLight` | Require operator approval before each transfer | +| `RuleConditionalTransferLight` | Require operator approval before each transfer; bound to exactly one token at a time (`bindToken` reverts if a token is already bound; use `unbindToken` first to migrate) | | `RuleConditionalTransferLightOwnable2Step` | Owner-only approval and execution for conditional transfers | | `AccessControlModuleStandalone` | Base RBAC module; admin implicitly holds all roles | | `MetaTxModuleStandalone` | ERC-2771 meta-transaction support | | `VersionModule` | Implements `IERC3643Version`; returns the contract version string | ## Dependencies (lib/) -- `openzeppelin-contracts` v5.5.0 — `AccessControl`, `Ownable2Step`, `EnumerableSet`, `ERC2771Context` +- `openzeppelin-contracts` v5.6.1 — `AccessControl`, `Ownable2Step`, `EnumerableSet`, `ERC2771Context` +- `openzeppelin-contracts-upgradeable` v5.6.1 - `CMTAT` v3.0.0 — `IERC1404`, `IERC3643`, `IRuleEngine` interfaces -- `RuleEngine` v3.0.0-rc0 — `IRule`, `RulesManagementModule` +- `RuleEngine` v3.0.0-rc2 — `IRule`, `RulesManagementModule` - `forge-std` — Foundry test utilities Remappings are in `remappings.txt`; aliases used in source: `OZ/`, `CMTAT/`, `RuleEngine/`. @@ -66,6 +67,7 @@ Foundry config: `foundry.toml` (solc 0.8.34, EVM prague, optimizer 200 runs). - AccessControl variants must use `onlyRole(ROLE)` in `_authorize*()` methods (avoid direct `_checkRole`). - AccessControl variants treat the default admin as having all roles via `hasRole`, but the admin may not appear in role member enumerations unless explicitly granted. - All rules implement `IERC3643Version` via `VersionModule`; the current version string is `"0.2.0"`. +- **ERC-165 interface IDs**: `type(IFoo).interfaceId` only XORs selectors defined directly on `IFoo` and does NOT include selectors from inherited interfaces. Always use the pre-computed library constants instead: `ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID` (from `CMTAT/library/`), `RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID` (from `CMTAT/library/`), and `RuleInterfaceId.IRULE_INTERFACE_ID` (from `RuleEngine/modules/library/`). If no pre-computed constant exists for an interface, define a flat mock interface that redeclares all functions from the full inheritance tree and use `type(IFooFlattened).interfaceId` to compute the correct value (see `lib/RuleEngine/src/mocks/IRuleInterfaceIdHelper.sol` for the established pattern). - Batch add/remove operations are non-reverting (skip duplicates); single-item operations revert on invalid input. - All `internal` functions should be marked `virtual`. - Do not create git commits; provide commit messages only when requested. diff --git a/README.md b/README.md index 83a13f5..097c66c 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,6 @@ Each rule can be used **standalone**, directly plugged into a CMTAT token, **or* [TOC] - - ## Overview The **RuleEngine** is an external smart contract that applies transfer restrictions to security tokens such as **CMTAT** or [ERC-3643](https://eips.ethereum.org/EIPS/eip-3643)-compatible tokens through a RuleEngine. @@ -64,7 +62,7 @@ forge test | Component | Compatible Versions | | ---------------- | ----------------------------------------- | -| **Rules v0.1.0** | CMTAT ≥ v3.0.0
RuleEngine v3.0.0-rc1 | +| **Rules v0.1.0** | CMTAT ≥ v3.0.0
RuleEngine v3.0.0-rc2 | Each Rule implements the interface `IRuleEngine` defined in CMTAT. @@ -72,10 +70,6 @@ This interface declares the ERC-3643 functions `transferred`(read-write) and `ca ## Specifications -Draft ERC specifications maintained in this repository: - -- `ERCSpecification/erc-XXXX-transfer-context.md` - transfer context hook (fungible and non-fungible). - ### ERC-3643 Each rule implements the following functions from the ERC-3643 `ICompliance`interface @@ -85,9 +79,9 @@ function canTransfer(address _from, address _to, uint256 _amount) external view function transferred(address _from, address _to, uint256 _amount) external; ``` -However, contrary to the RuleEngine, the whole interface is currently not implemented (e.g. `created`and `destroyed`) and as a result, the rule can not directly supported ERC-3643 token. +However, contrary to the RuleEngine, the whole interface is currently not implemented (e.g. `created`and `destroyed`) and as a result, the rule can not directly support ERC-3643 token. -The alternative to use a Rule with an ERC-3643 token is trough the RuleEngine, which implements the whole `ICompliance` interface. +The alternative to use a Rule with an ERC-3643 token is through the RuleEngine, which implements the whole `ICompliance` interface. ### ERC-721/ERC-1155 @@ -136,9 +130,9 @@ function transferred(address spender, address from, address to, uint256 tokenId, ### Rule - Code list -> It is very important that each rule uses an unique code +> It is very important that each rule uses a unique code -Here the list of codes used by the different rules +Here is the list of codes used by the different rules | Contract | Constant name | Value | | ----------------------- | ------------------------------------ | ----- | @@ -245,7 +239,7 @@ The RuleEngine can then: Each rule can be directly plugged to a CMTAT token similar to a RuleEngine. -Indeed, each rules implements the required interface (`IRuleEngine`) with notably the following function as entrypoint. +Indeed, each rule implements the required interface (`IRuleEngine`) with notably the following function as entrypoint. ```solidity function transferred(address from,address to,uint256 value) @@ -278,7 +272,7 @@ interface IRuleEngine is IERC1404Extend, IERC7551Compliance, IERC3643IComplianc #### RuleEngine -For a RuleEngine, each rule implements also the required entry point similar to CMTAT, and as well some specific interface for the RuleEngine through the implementation of `IRule`interface dfeined in the RuleEngine repository +For a RuleEngine, each rule implements also the required entry point similar to CMTAT, and as well some specific interface for the RuleEngine through the implementation of `IRule` interface defined in the RuleEngine repository. ```solidity interface IRule is IRuleEngine { @@ -366,7 +360,7 @@ Several rules are available in multiple access-control variants. Use the simples | RuleMaxTotalSupply | Read-Only | | | | This rule limits minting so that the total supply never exceeds a configured maximum. | | RuleIdentityRegistry | Read-Only | | | | This rule checks the ERC-3643 Identity Registry for transfer participants when configured. | | RuleSpenderWhitelist | Read-Only | | | | This rule blocks `transferFrom` when the spender is not in the whitelist. Direct transfers are always allowed. | -| RuleERC2980 | Read-Only | | | | ERC-2980 Swiss Compliant rule combining a whitelist (recipient-only) and a frozenlist (blocks both sender and recipient). Frozenlist takes priority over whitelist. | +| RuleERC2980 | Read-Only | | | | ERC-2980 Swiss Compliant rule combining a whitelist (recipient-only) and a frozenlist (blocks sender, recipient, and spender for `transferFrom`). Frozenlist takes priority over whitelist. | | RuleConditionalTransferLight | Read-Write | | | | This rule requires that transfers have to be approved by an operator before being executed. Each approval is consumed once and the same transfer can be approved multiple times. | | [RuleConditionalTransfer](https://github.com/CMTA/RuleConditionalTransfer) (external) | Read-Write | | |
(experimental rule) | Full-featured approval-based transfer rule implementing Swiss law *Vinkulierung*. Supports automatic approval after three months, automatic transfer execution, and a conditional whitelist for address pairs that bypass approval. Maintained in a separate repository. | | [RuleSelf](https://github.com/rya-sge/ruleself) (community) | — | | — |
(community project) | Use [Self](https://self.xyz), a zero-knowledge identity solution to determine which is allowed to interact with the token.
Community-maintained rule project. Not developed or maintained by CMTA. | @@ -391,25 +385,50 @@ Detailed technical documentation for each rule is available in [`doc/technical/` ### Operational Notes -- `RuleIdentityRegistry` allows burns (`to == address(0)`) even if the sender is not verified. This matters only if the token allows self-burn. -- `RuleSanctionsList` rejects zero address in `setSanctionListOracle`. Use `clearSanctionListOracle()` to disable checks. -- `RuleIdentityRegistry` can be disabled with `clearIdentityRegistry()`, which allows all transfers to pass this rule. -- Constructors for `RuleSanctionsList` and `RuleIdentityRegistry` accept a zero address to start in a disabled state. -- `RuleMaxTotalSupply` trusts the configured `tokenContract` to return an accurate `totalSupply()`. -- `RuleMaxTotalSupply` does not allow clearing the token contract; disable the rule by removing it from the RuleEngine or token. -- `RuleWhitelistWrapper` requires child rules that implement `IAddressList`. Gas cost grows with the number of rules, and a wrapper with zero rules will reject all transfers. -- `RuleSpenderWhitelist` only checks the spender in `transferFrom`; direct transfers always pass this rule. -- Read-only rules still implement `transferred()` to comply with ERC-3643 and RuleEngine interfaces, but they do not change state. -- `RuleConditionalTransferLight` approvals are keyed by `(from, to, value)` and are not nonce-based. -- `RuleConditionalTransferLight` provides `approveAndTransferIfAllowed` to approve and immediately execute `transferFrom` when this rule has allowance; it assumes the token calls back `transferred()` during the transfer. -- `RuleConditionalTransferLight` restricts `transferred()` to tokens bound via `bindToken` (ERC3643ComplianceModule). -- `RuleConditionalTransferLight` exempts mints (`from == address(0)`) and burns (`to == address(0)`) from the approval requirement; `created` and `destroyed` delegate to `_transferred`, which returns early for those cases. -- AccessControl variants use `onlyRole(ROLE)` in `_authorize*()` and internal helpers are marked `virtual`. -- AccessControl variants use `AccessControlEnumerable`, so role members can be enumerated with `getRoleMember` / `getRoleMemberCount`. The default admin is treated as having all roles via `hasRole`, but may not appear in role member lists unless explicitly granted. -- `forwarderIrrevocable` is accepted as-is (including `address(0)`), and is not validated against ERC-165 because some forwarders do not implement it. -- `RuleERC2980` frozenlist takes priority over the whitelist: an address that is both whitelisted and frozen will be rejected. -- `RuleERC2980` sender (`from`) does not need to be whitelisted; only the recipient (`to`) must be whitelisted for a transfer to succeed. -- All rules implement `IERC3643Version` via `VersionModule` and expose a `version()` function returning `"0.2.0"`. +#### RuleIdentityRegistry + +- `RuleIdentityRegistry`: allows burns (`to == address(0)`) even if the sender is not verified. This matters only if the token allows self-burn. +- `RuleIdentityRegistry`: can be disabled with `clearIdentityRegistry()`, which allows all transfers to pass this rule. +- `RuleIdentityRegistry`: constructor accepts `address(0)` to start in a disabled state. + +#### RuleSanctionsList + +- `RuleSanctionsList`: rejects zero address in `setSanctionListOracle`. Use `clearSanctionListOracle()` to disable checks. +- `RuleSanctionsList`: constructor accepts `address(0)` to start in a disabled state. + +#### RuleMaxTotalSupply + +- `RuleMaxTotalSupply`: trusts the configured `tokenContract` to return an accurate `totalSupply()`. +- `RuleMaxTotalSupply`: does not allow clearing the token contract; disable the rule by removing it from the RuleEngine or token. + +#### RuleWhitelistWrapper + +- `RuleWhitelistWrapper`: requires child rules that implement `IAddressList`. Gas cost grows with the number of rules, and a wrapper with zero rules rejects all transfers. + +#### RuleSpenderWhitelist + +- `RuleSpenderWhitelist`: only checks the spender in `transferFrom`; direct transfers always pass this rule. + +#### RuleERC2980 + +- `RuleERC2980`: frozenlist takes priority over whitelist; an address that is both whitelisted and frozen is rejected. +- `RuleERC2980`: a frozen address acting as `transferFrom` spender is also blocked (code 62), even if `from` and `to` are not frozen. +- `RuleERC2980`: sender (`from`) does not need to be whitelisted; only recipient (`to`) must be whitelisted. + +#### RuleConditionalTransferLight + +- `RuleConditionalTransferLight`: approvals are keyed by `(from, to, value)` and are not nonce-based. +- `RuleConditionalTransferLight`: `approveAndTransferIfAllowed` approves and immediately executes `transferFrom` when this rule has allowance; it assumes token callback to `transferred()`. +- `RuleConditionalTransferLight`: `transferred()` is restricted to the single token bound via `bindToken`; second bind reverts with `RuleConditionalTransferLight_TokenAlreadyBound` until `unbindToken`. +- `RuleConditionalTransferLight`: mints (`from == address(0)`) and burns (`to == address(0)`) are exempt from approval checks; `created` and `destroyed` delegate to `_transferred`. + +#### General notes + +- All validation rules: read-only rules still implement `transferred()` for ERC-3643 and RuleEngine compatibility, but do not change state. +- All AccessControl variants: use `onlyRole(ROLE)` in `_authorize*()` and mark internal helpers `virtual`. +- All AccessControl variants: use `AccessControlEnumerable`, so role members can be enumerated with `getRoleMember` / `getRoleMemberCount`; default admin is treated as having all roles via `hasRole`, but may not appear in role member lists unless explicitly granted. +- All meta-tx-enabled rules: `forwarderIrrevocable` is accepted as-is (including `address(0)`) and is not validated against ERC-165 because some forwarders do not implement it. +- All rules: implement `IERC3643Version` via `VersionModule` and expose `version()` returning `"0.3.0"`. ### Read-only (validation) rule @@ -424,6 +443,8 @@ Only whitelisted addresses may hold or receive tokens. - `to` is not whitelisted The rule is read-only: it only checks stored state. +- Constructor parameter `allowMintBurn` can pre-list `address(0)` for mint/burn flows. +- `allowMintBurn = false` keeps legacy behavior (operator adds `address(0)` manually if needed). **Example** @@ -490,8 +511,14 @@ The operator sets `RuleBlacklist` on the token. The issuer tries to transfer to Implements the [ERC-2980](https://eips.ethereum.org/EIPS/eip-2980) Swiss Compliant Asset Token transfer restriction using two independent address lists managed in a single rule: - **Whitelist**: only whitelisted addresses may *receive* tokens. Senders do not need to be whitelisted and may freely transfer tokens they already hold. -- **Frozenlist**: frozen addresses are completely blocked — they can neither send nor receive tokens. -- **Priority**: frozenlist is checked first. If `from` or `to` is frozen, the transfer is rejected regardless of whitelist membership. +- **Frozenlist**: frozen addresses are completely blocked — they can neither send nor receive tokens. Additionally, a frozen address acting as a `transferFrom` spender will have the transfer rejected (code 62), even if `from` and `to` are not frozen. +- **Priority**: frozenlist is checked first. If `from`, `to`, or `spender` is frozen, the transfer is rejected regardless of whitelist membership. +- **Burn/redemption handling**: burns (`to == address(0)`) follow the same recipient whitelist check. Constructor parameter `allowBurn` controls whether `address(0)` is whitelisted at deployment. + - `allowBurn = false` (default-safe): burns are blocked with code 63. + - `allowBurn = true`: burns are allowed because `address(0)` is whitelisted. +- Constructors: + - `RuleERC2980(address admin, address forwarderIrrevocable, bool allowBurn)` + - `RuleERC2980Ownable2Step(address owner, address forwarderIrrevocable, bool allowBurn)` ![surya_inheritance_RuleERC2980.sol](./doc/surya/surya_inheritance/surya_inheritance_RuleERC2980.sol.png) @@ -508,7 +535,7 @@ Restriction codes: **Usage scenario** -The operator deploys `RuleERC2980`. The issuer whitelists Alice with `addWhitelistAddress(Alice)`. A transfer to Alice succeeds. The compliance officer freezes Bob with `addFrozenlistAddress(Bob)`. Any transfer from or to Bob is now rejected even if Bob was previously whitelisted. +The operator deploys `RuleERC2980` and chooses `allowBurn` according to the redemption policy. The issuer whitelists Alice with `addWhitelistAddress(Alice)`. A transfer to Alice succeeds. The compliance officer freezes Bob with `addFrozenlistAddress(Bob)`. Any transfer from or to Bob is now rejected even if Bob was previously whitelisted. #### Sanction list with Chainalysis @@ -518,7 +545,7 @@ Uses the [Chainalysis](https://www.chainalysis.com/) Oracle to reject transfers - Documentation: *Chainalysis Oracle for sanctions screening* - If `from` or `to` is sanctioned, transfer is rejected. -Documentation and the contracts addresses are available here: [Chainalysis oracle for sanctions screening](https://go.chainalysis.com/chainalysis-oracle-docs.html). +The documentation and contract addresses are available here: [Chainalysis oracle for sanctions screening](https://go.chainalysis.com/chainalysis-oracle-docs.html). ![surya_inheritance_RuleSanctionsList.sol](./doc/surya/surya_inheritance/surya_inheritance_RuleSanctionsList.sol.png) @@ -562,17 +589,23 @@ This rule requires that transfers must be approved by an operator before being e **Usage scenario** -An operator calls `approveTransfer(from, to, value)`. The compliance manager binds the token with `bindToken(token)`. The token calls `detectTransferRestriction` (passes) and later `transferred` to consume the approval. Without approval, `detectTransferRestriction` returns code 46 and the transfer is rejected. The operator can revoke with `cancelTransferApproval`. +An operator calls `approveTransfer(from, to, value)`. The compliance manager binds exactly one token with `bindToken(token)`; attempting to bind a second token reverts. The token calls `detectTransferRestriction` (passes) and later `transferred` to consume the approval. Without approval, `detectTransferRestriction` returns code 46 and the transfer is rejected. The operator can revoke with `cancelTransferApproval`. To migrate to a different token, the compliance manager must first call `unbindToken` before binding the new one. ## Access Control -The modules `AccessControlModuleStandalone` allows to implement RBAC access control by inheriting from the contract `AccessControl`from OpenZeppelin. +The module `AccessControlModuleStandalone` implements RBAC access control by inheriting from OpenZeppelin's `AccessControlEnumerable`. + +Each rule implements its own access control by inheriting from `AccessControlModuleStandalone`. The default admin is the address passed as `admin` to the constructor at deployment. -This module overrides the OpenZeppelin function `hasRole`to give by default all the roles to the `admin`. +#### `DEFAULT_ADMIN_ROLE` implicit role behaviour -Each rule implements its own access control by inheriting from the module `AccessControlModuleStandalone`. +`AccessControlModuleStandalone` overrides OpenZeppelin's `hasRole` so that any account holding `DEFAULT_ADMIN_ROLE` returns `true` for **every** role check. This is intentional: the OpenZeppelin `DEFAULT_ADMIN_ROLE` holder can already grant itself any role at any time, so treating it as implicitly holding all roles from the start removes unnecessary ceremony and makes access management easier in practice. -For all rules, the default admin is the address put in argument(`admin`) inside the constructor and set when the contract is deployed. +Practical consequences integrators must be aware of: + +- **`grantRole` to a default admin is a no-op.** `_grantRole` checks `!hasRole(role, account)` before writing storage; since the admin already returns `true` via the override, the storage write and the `RoleGranted` event are skipped. The admin will **not** appear in `getRoleMember` / `getRoleMemberCount` enumerations for non-default roles unless the role was explicitly granted before the admin was set. +- **`revokeRole` / `renounceRole`** on a non-default role for a default admin are misleading. They emit `RoleRevoked` and clear the storage flag, but `hasRole` continues to return `true` because the account still holds `DEFAULT_ADMIN_ROLE`. The effective privilege is unchanged. To fully remove access, `DEFAULT_ADMIN_ROLE` itself must be revoked. +- **Off-chain monitoring** should use `hasRole` queries, not role-membership events or enumeration, to determine the effective privileges of admin accounts. See also [docs.openzeppelin.com - AccessControl](https://docs.openzeppelin.com/contracts/5.x/api/access#AccessControl) @@ -639,15 +672,19 @@ Here are the settings for [Hardhat](https://hardhat.org) and [Foundry](https://g - Forge std [v1.12.0](https://github.com/foundry-rs/forge-std/releases/tag/v1.12.0 ) - - OpenZeppelin Contracts (submodule) [v5.6.0](https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.0) + - OpenZeppelin Contracts (submodule) [v5.6.1](https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.6.1) + + - OpenZeppelin Contracts Upgradeable (submodule) [v5.6.1](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/releases/tag/v5.6.1) - CMTAT [v3.2.0](https://github.com/CMTA/CMTAT/releases/tag/v3.2.0) - - RuleEngine [v3.0.0-rc1](https://github.com/CMTA/RuleEngine/releases/tag/v3.0.0-rc1) + - RuleEngine [v3.0.0-rc2](https://github.com/CMTA/RuleEngine/releases/tag/v3.0.0-rc2) ### Toolchain installation -The contracts are developed and tested with [Foundry](https://book.getfoundry.sh), a smart contract development toolchain. +This repository is primarily developed and tested with [Foundry](https://book.getfoundry.sh), a smart contract development toolchain. + +Hardhat configuration is also present to support contract compilation and a small smoke test with Hardhat. To install the Foundry suite, please refer to the official instructions in the [Foundry book](https://book.getfoundry.sh/getting-started/installation). @@ -677,6 +714,12 @@ The official documentation is available in the Foundry [website](https://book.ge forge build ``` +Hardhat compilation (optional): + +```bash +npm run hardhat:compile +``` + ### Contract size ```bash @@ -691,6 +734,12 @@ You can run the tests with forge test ``` +Hardhat smoke test (optional): + +```bash +npm run hardhat:test:smoke +``` + To run a specific test, use ```bash @@ -729,6 +778,8 @@ Gas usage is tracked in two complementary files: ### Coverage +![coverage](./doc/coverage/coverage.png) + A code coverage is available in [index.html](./doc/coverage/coverage/index.html). * Perform a code coverage @@ -746,14 +797,14 @@ forge coverage --report lcov - Generate `index.html` ```bash -forge coverage --no-match-coverage "(script|mocks|test)" --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage +forge coverage --no-match-coverage "(script|mocks|test)" --report lcov && genhtml lcov.info --branch-coverage --prefix "$PWD/" --output-dir coverage ``` -See [Solidity Coverage in VS Code with Foundry](https://mirror.xyz/devanon.eth/RrDvKPnlD-pmpuW7hQeR5wWdVjklrpOgPCOA-PJkWFU) & [Foundry forge coverage]( +See [Solidity Coverage in VS Code with Foundry](https://mirror.xyz/devanon.eth/RrDvKPnlD-pmpuW7hQeR5wWdVjklrpOgPCOA-PJkWFU) & [Foundry forge coverage](https://www.rareskills.io/post/foundry-forge-coverage) ### Other -Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust.* +Foundry is a blazing fast, portable and modular toolkit for Ethereum application development written in Rust. Foundry consists of: @@ -1239,13 +1290,14 @@ Checks the listing status of multiple addresses in a single call. ##### Null address It is possible to add the null address (0x0) to the address list. In a whitelist, this enables mint/burn flows (since `from`/`to` can be zero). In a blacklist, adding `0x0` blocks mint/burn. +For `RuleWhitelist`, you can also pre-list `0x0` at deployment using the constructor parameter `allowMintBurn=true`. ##### Duplicate address **addAddress** If the address already exists, the transaction is reverted to save gas. **addAddresses** -If one of addresses already exist, there is no change for this address. The transaction remains valid (no revert). +If one of the addresses already exist, there is no change for this address. The transaction remains valid (no revert). ##### NonExistent Address @@ -1606,13 +1658,13 @@ Removes one approval for the transfer. #### approveAndTransferIfAllowed ```solidity -function approveAndTransferIfAllowed(address token, address from, address to, uint256 value) +function approveAndTransferIfAllowed(address from, address to, uint256 value) public onlyTransferApprover returns (bool) ``` -Approves then calls `transferFrom` using this rule as spender. +Approves then calls `SafeERC20.safeTransferFrom` on the bound token using this rule as spender. #### approvedCount @@ -1625,33 +1677,33 @@ function approvedCount(address from, address to, uint256 value) Returns the number of approvals for the transfer hash. - - ## Security ### Automated Analysis -#### Aderyn (v0.2.0) +Latest tool outputs for this release cycle (including feedback documents) are available in [`doc/security/audits/tools/v0.3.0/`](./doc/security/audits/tools/v0.3.0/). +`v0.3.0` cleanup: removed unused `RuleConditionalTransferLight_TransferFailed` custom error after SafeERC20 migration. + +#### Aderyn (v0.3.0) -Static analysis was performed with [Aderyn](https://github.com/Cyfrin/aderyn). The full report and the project team's feedback are available in [`doc/security/audits/tools/v0.2.0/`](./doc/security/audits/tools/v0.2.0/). +Static analysis was performed with [Aderyn](https://github.com/Cyfrin/aderyn). The full report and the project team's feedback are available in [`doc/security/audits/tools/v0.3.0/`](./doc/security/audits/tools/v0.3.0/). | ID | Title | Instances | Verdict | |---|---|---|---| -| L-1 | Centralization Risk | 41 | Acknowledged — by design (regulated token issuer model) | -| L-2 | Unsafe ERC20 Operation | 1 | Acknowledged — return value already checked with `require` | -| L-3 | Unspecific Solidity Pragma | 48 | Acknowledged — intentional for a library | -| L-4 | Address State Variable Set Without Checks | 1 | False positive — check enforced in public-facing function | -| L-5 | PUSH0 Opcode | 48 | Acknowledged — project targets Prague EVM | -| L-6 | Modifier Invoked Only Once | 2 | Acknowledged — template method pattern; inlining would break abstraction | -| L-7 | Empty Block | 34 | Acknowledged — `_authorize*()` hooks use modifier; `created()`/`destroyed()` are intentional no-ops | -| L-8 | Costly Operations Inside Loop | 6 | Acknowledged — unavoidable (`EnumerableSet` requires one `SSTORE` per element) | -| L-9 | Unchecked Return | 13 | False positive — all instances are `void` calls, checked in caller, or intentionally ignored | +| L-1 | Centralization Risk | 46 | Acknowledged — by design (regulated token issuer model) | +| L-2 | Unspecific Solidity Pragma | 54 | Acknowledged — intentional for a library | +| L-3 | Address State Variable Set Without Checks | 1 | False positive — check enforced in public-facing function | +| L-4 | PUSH0 Opcode | 54 | Acknowledged — project targets Prague EVM | +| L-5 | Modifier Invoked Only Once | 2 | Acknowledged — template method pattern; inlining would break abstraction | +| L-6 | Empty Block | 38 | Acknowledged — `_authorize*()` hooks use modifiers; intentional no-op implementations in required interface paths | +| L-7 | Costly operations inside loop | 6 | Acknowledged — unavoidable (`EnumerableSet` requires one `SSTORE` per element) | +| L-8 | Unchecked Return | 13 | Mixed — mostly false positives (`void` helpers or pre-checked single-item paths); constructor `_grantRole` intentionally ignored | No high-severity issues were reported. -#### Slither (v0.2.0) +#### Slither (v0.3.0) -Static analysis was performed with [Slither](https://github.com/crytic/slither). The full report and the project team's feedback are available in [`doc/security/audits/tools/v0.2.0/`](./doc/security/audits/tools/v0.2.0/). +Static analysis was performed with [Slither](https://github.com/crytic/slither). The full report and the project team's feedback are available in [`doc/security/audits/tools/v0.3.0/`](./doc/security/audits/tools/v0.3.0/). | Category | Severity | Instances | Verdict | |---|---|---|---| @@ -1659,10 +1711,22 @@ Static analysis was performed with [Slither](https://github.com/crytic/slither). | unused-return | Medium | 6 | False positive — existence pre-checked at public layer before calling internal helper | | calls-loop | Low | 16 | Acknowledged — by design; wrapper must query each child rule; child rules are read-only | | assembly | Informational | 1 | Acknowledged — intentional gas optimisation in `_transferHash`; minimal and well-scoped | -| missing-inheritance | Informational | 1 | Acknowledged — `TotalSupplyMock` is a test-only mock; strict interface declaration unnecessary | | naming-convention | Informational | 2 | Acknowledged — parameter names match ERC-2980 spec | | unindexed-event-address | Informational | 2 | Out of scope (both in `lib/RuleEngine`); `IAddressList` events previously fixed | -| unused-state | Informational | 60 | False positive — `RuleNFTAdapter` constants used in base dispatch logic; Slither per-contract analysis limitation | +| unused-state | Informational | 8 | False positive — `RuleNFTAdapter` constants used in base dispatch logic; Slither per-contract analysis limitation | + +#### Wake Arena (v0.2.0) + +AI-assisted static analysis was performed with [Wake Arena](https://getwake.io) by Ackee Blockchain Security. The full report and the project team's feedback are available in [`doc/security/audits/tools/v0.2.0/`](./doc/security/audits/tools/v0.2.0/). + +*Ackee Blockchain Security, Wake Arena AI Report | CMTA: Rules, March 16, 2026 18:00 UTC.* + +| ID | Title | Severity | Confidence | Verdict | +|---|---|---|---|---| +| H-1 | ConditionalTransferLight approvals not scoped by token | High | High | Fixed — single-token binding enforced in `bindToken`; `RuleConditionalTransferLight_TokenAlreadyBound` error added | +| M-1 | Incomplete `supportsInterface` breaks ERC-165 discovery | Medium | High | Fixed — pre-computed constants + `IERC7551Compliance` + full ERC-3643 `ICompliance` ID (`IERC3643ComplianceFull`, `0x3144991c`) added | +| I-1 | RuleERC2980 docs omit frozen spender on `transferFrom` | Informational | High | Fixed (doc only) — README, `AGENTS.md`, and `CLAUDE.md` updated to document spender freeze path | +| I-2 | `hasRole` override: admin implicitly passes all role checks | Informational | High | Fixed (doc only) — dedicated section added to README documenting intentional design and off-chain monitoring guidance | ## Intellectual property diff --git a/doc/coverage/coverage.png b/doc/coverage/coverage.png new file mode 100644 index 0000000..5535814 Binary files /dev/null and b/doc/coverage/coverage.png differ diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-b.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-b.html deleted file mode 100644 index c5cb892..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-b.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/modules - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/modulesHitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-03-10 16:16:27Functions:33100.0 %
Branches:44100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
VersionModule.sol -
100.0%
-
100.0 %2 / 2100.0 %1 / 1-0 / 0
AccessControlModuleStandalone.sol -
100.0%
-
100.0 %7 / 7100.0 %2 / 2100.0 %4 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-f.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-f.html deleted file mode 100644 index f5b2551..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-f.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/modules - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/modulesHitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-03-10 16:16:27Functions:33100.0 %
Branches:44100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
VersionModule.sol -
100.0%
-
100.0 %2 / 2100.0 %1 / 1-0 / 0
AccessControlModuleStandalone.sol -
100.0%
-
100.0 %7 / 7100.0 %2 / 2100.0 %4 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-l.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-l.html deleted file mode 100644 index cd1b8a4..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index-sort-l.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/modules - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/modulesHitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-03-10 16:16:27Functions:33100.0 %
Branches:44100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
VersionModule.sol -
100.0%
-
100.0 %2 / 2100.0 %1 / 1-0 / 0
AccessControlModuleStandalone.sol -
100.0%
-
100.0 %7 / 7100.0 %2 / 2100.0 %4 / 4
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index.html deleted file mode 100644 index 469987d..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/index.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/modules - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/modulesHitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-03-10 16:16:27Functions:33100.0 %
Branches:44100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
AccessControlModuleStandalone.sol -
100.0%
-
100.0 %7 / 7100.0 %2 / 2100.0 %4 / 4
VersionModule.sol -
100.0%
-
100.0 %2 / 2100.0 %1 / 1-0 / 0
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html deleted file mode 100644 index 92fa7b0..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLight.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLight.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:1111100.0 %
Date:2026-03-10 16:16:27Functions:66100.0 %
Branches:22100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLight.created1
RuleConditionalTransferLight.destroyed1
RuleConditionalTransferLight.supportsInterface18
RuleConditionalTransferLight._onlyComplianceManager19
RuleConditionalTransferLight._authorizeTransferExecution770
RuleConditionalTransferLight._authorizeTransferApproval1848
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func.html deleted file mode 100644 index 0ccd4a1..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.func.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLight.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLight.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:1111100.0 %
Date:2026-03-10 16:16:27Functions:66100.0 %
Branches:22100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLight._authorizeTransferApproval1848
RuleConditionalTransferLight._authorizeTransferExecution770
RuleConditionalTransferLight._onlyComplianceManager19
RuleConditionalTransferLight.created1
RuleConditionalTransferLight.destroyed1
RuleConditionalTransferLight.supportsInterface18
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html deleted file mode 100644 index 99f53d0..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract/RuleConditionalTransferLightBase.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightBase.canReturnTransferRestrictionCode1
RuleConditionalTransferLightBase.canTransferFrom1
RuleConditionalTransferLightBase.detectTransferRestrictionFrom1
RuleConditionalTransferLightBase.transferred.11
RuleConditionalTransferLightBase.messageForTransferRestriction2
RuleConditionalTransferLightBase._transferredFromContext3
RuleConditionalTransferLightBase.onlyTransferExecutor3
RuleConditionalTransferLightBase.transferred.23
RuleConditionalTransferLightBase.approveAndTransferIfAllowed4
RuleConditionalTransferLightBase.canTransfer4
RuleConditionalTransferLightBase.cancelTransferApproval4
RuleConditionalTransferLightBase.onlyTransferApprover4
RuleConditionalTransferLightBase.detectTransferRestriction7
RuleConditionalTransferLightBase.approvedCount263
RuleConditionalTransferLightBase.transferred.0769
RuleConditionalTransferLightBase._transferred773
RuleConditionalTransferLightBase.approveTransfer1841
RuleConditionalTransferLightBase._transferHash2885
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html deleted file mode 100644 index fdf58b9..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract/RuleConditionalTransferLightBase.sol - functions - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightBase._transferHash2885
RuleConditionalTransferLightBase._transferred773
RuleConditionalTransferLightBase._transferredFromContext3
RuleConditionalTransferLightBase.approveAndTransferIfAllowed4
RuleConditionalTransferLightBase.approveTransfer1841
RuleConditionalTransferLightBase.approvedCount263
RuleConditionalTransferLightBase.canReturnTransferRestrictionCode1
RuleConditionalTransferLightBase.canTransfer4
RuleConditionalTransferLightBase.canTransferFrom1
RuleConditionalTransferLightBase.cancelTransferApproval4
RuleConditionalTransferLightBase.detectTransferRestriction7
RuleConditionalTransferLightBase.detectTransferRestrictionFrom1
RuleConditionalTransferLightBase.messageForTransferRestriction2
RuleConditionalTransferLightBase.onlyTransferApprover4
RuleConditionalTransferLightBase.onlyTransferExecutor3
RuleConditionalTransferLightBase.transferred.0769
RuleConditionalTransferLightBase.transferred.11
RuleConditionalTransferLightBase.transferred.23
-
-
- - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html deleted file mode 100644 index ae4276f..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-b.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightBase.sol -
100.0%
-
100.0 %66 / 66100.0 %18 / 18100.0 %14 / 14
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html deleted file mode 100644 index 461d0f6..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-f.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightBase.sol -
100.0%
-
100.0 %66 / 66100.0 %18 / 18100.0 %14 / 14
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html deleted file mode 100644 index 55bb533..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index-sort-l.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightBase.sol -
100.0%
-
100.0 %66 / 66100.0 %18 / 18100.0 %14 / 14
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html b/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html deleted file mode 100644 index a47f107..0000000 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - LCOV - lcov.info - ../../../src/rules/operation/abstract - - - - - - - - - - - - - - -
LCOV - code coverage report
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Current view:top level - ../../../src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:6666100.0 %
Date:2026-03-10 16:16:27Functions:1818100.0 %
Branches:1414100.0 %
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightBase.sol -
100.0%
-
100.0 %66 / 66100.0 %18 / 18100.0 %14 / 14
-
-
- - - - -
Generated by: LCOV version 1.16
-
- - - diff --git a/doc/coverage/coverage/index-sort-b.html b/doc/coverage/coverage/index-sort-b.html index 1c4e1f3..1109724 100644 --- a/doc/coverage/coverage/index-sort-b.html +++ b/doc/coverage/coverage/index-sort-b.html @@ -31,26 +31,26 @@ lcov.info Lines: - 742 - 742 - 100.0 % + 764 + 781 + 97.8 % Date: - 2026-03-10 16:16:27 + 2026-04-16 15:29:51 Functions: - 268 - 268 - 100.0 % + 270 + 287 + 94.1 % Branches: - 159 - 159 + 161 + 161 100.0 % @@ -82,31 +82,31 @@ Branches Sort by branch coverage - deployment + src/rules/operation
100.0%
100.0 % - 133 / 133 + 18 / 18 100.0 % - 79 / 79 + 6 / 6 - 0 / 0 - ../../../src/rules/operation + src/rules/validation/deployment
100.0%
100.0 % - 16 / 16 - 100.0 % - 9 / 9 + 133 / 133 100.0 % - 2 / 2 + 79 / 79 + - + 0 / 0 - ../../../src/modules + src/modules
100.0%
@@ -118,7 +118,7 @@ 4 / 4 - abstract/RuleERC2980 + src/rules/validation/abstract/RuleERC2980
100.0%
@@ -130,52 +130,52 @@ 8 / 8 - abstract/RuleAddressSet + src/rules/validation/abstract/RuleAddressSet -
100.0%
+
96.3%96.3%
- 100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 96.3 % + 52 / 54 + 90.5 % + 19 / 21 100.0 % 8 / 8 - abstract/core + src/rules/validation/abstract/core -
100.0%
+
93.3%93.3%
- 100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 93.3 % + 56 / 60 + 82.6 % + 19 / 23 100.0 % 14 / 14 - ../../../src/rules/operation/abstract + src/rules/operation/abstract -
100.0%
+
97.4%97.4%
+ 97.4 % + 75 / 77 + 91.7 % + 22 / 24 100.0 % - 66 / 66 - 100.0 % - 18 / 18 - 100.0 % - 14 / 14 + 16 / 16 - abstract/base + src/rules/validation/abstract/base -
100.0%
+
97.7%97.7%
+ 97.7 % + 385 / 394 + 92.4 % + 110 / 119 100.0 % - 378 / 378 - 100.0 % - 109 / 109 - 100.0 % - 109 / 109 + 111 / 111 diff --git a/doc/coverage/coverage/index-sort-f.html b/doc/coverage/coverage/index-sort-f.html index a5d5163..a03f87b 100644 --- a/doc/coverage/coverage/index-sort-f.html +++ b/doc/coverage/coverage/index-sort-f.html @@ -31,26 +31,26 @@ lcov.info Lines: - 742 - 742 - 100.0 % + 764 + 781 + 97.8 % Date: - 2026-03-10 16:16:27 + 2026-04-16 15:29:51 Functions: - 268 - 268 - 100.0 % + 270 + 287 + 94.1 % Branches: - 159 - 159 + 161 + 161 100.0 % @@ -82,79 +82,91 @@ Branches Sort by branch coverage - ../../../src/modules + src/rules/validation/abstract/core -
100.0%
+
93.3%93.3%
+ 93.3 % + 56 / 60 + 82.6 % + 19 / 23 100.0 % - 9 / 9 - 100.0 % - 3 / 3 + 14 / 14 + + + src/rules/validation/abstract/RuleAddressSet + +
96.3%96.3%
+ + 96.3 % + 52 / 54 + 90.5 % + 19 / 21 100.0 % - 4 / 4 + 8 / 8 - ../../../src/rules/operation + src/rules/operation/abstract -
100.0%
+
97.4%97.4%
+ 97.4 % + 75 / 77 + 91.7 % + 22 / 24 100.0 % 16 / 16 - 100.0 % - 9 / 9 - 100.0 % - 2 / 2 - abstract/RuleERC2980 + src/rules/validation/abstract/base -
100.0%
+
97.7%97.7%
+ 97.7 % + 385 / 394 + 92.4 % + 110 / 119 100.0 % - 36 / 36 - 100.0 % - 12 / 12 - 100.0 % - 8 / 8 + 111 / 111 - ../../../src/rules/operation/abstract + src/modules
100.0%
100.0 % - 66 / 66 + 9 / 9 100.0 % - 18 / 18 + 3 / 3 100.0 % - 14 / 14 + 4 / 4 - abstract/core + src/rules/operation
100.0%
100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 18 / 18 100.0 % - 14 / 14 + 6 / 6 + - + 0 / 0 - abstract/RuleAddressSet + src/rules/validation/abstract/RuleERC2980
100.0%
100.0 % - 52 / 52 + 36 / 36 100.0 % - 19 / 19 + 12 / 12 100.0 % 8 / 8 - deployment + src/rules/validation/deployment
100.0%
@@ -165,18 +177,6 @@ - 0 / 0 - - abstract/base - -
100.0%
- - 100.0 % - 378 / 378 - 100.0 % - 109 / 109 - 100.0 % - 109 / 109 -
diff --git a/doc/coverage/coverage/index-sort-l.html b/doc/coverage/coverage/index-sort-l.html index c3bb25f..7f305a4 100644 --- a/doc/coverage/coverage/index-sort-l.html +++ b/doc/coverage/coverage/index-sort-l.html @@ -31,26 +31,26 @@ lcov.info Lines: - 742 - 742 - 100.0 % + 764 + 781 + 97.8 % Date: - 2026-03-10 16:16:27 + 2026-04-16 15:29:51 Functions: - 268 - 268 - 100.0 % + 270 + 287 + 94.1 % Branches: - 159 - 159 + 161 + 161 100.0 % @@ -82,79 +82,91 @@ Branches Sort by branch coverage - ../../../src/modules + src/rules/validation/abstract/core -
100.0%
+
93.3%93.3%
+ 93.3 % + 56 / 60 + 82.6 % + 19 / 23 100.0 % - 9 / 9 - 100.0 % - 3 / 3 + 14 / 14 + + + src/rules/validation/abstract/RuleAddressSet + +
96.3%96.3%
+ + 96.3 % + 52 / 54 + 90.5 % + 19 / 21 100.0 % - 4 / 4 + 8 / 8 - ../../../src/rules/operation + src/rules/operation/abstract -
100.0%
+
97.4%97.4%
+ 97.4 % + 75 / 77 + 91.7 % + 22 / 24 100.0 % 16 / 16 - 100.0 % - 9 / 9 - 100.0 % - 2 / 2 - abstract/RuleERC2980 + src/rules/validation/abstract/base -
100.0%
+
97.7%97.7%
+ 97.7 % + 385 / 394 + 92.4 % + 110 / 119 100.0 % - 36 / 36 - 100.0 % - 12 / 12 - 100.0 % - 8 / 8 + 111 / 111 - abstract/core + src/modules
100.0%
100.0 % - 52 / 52 + 9 / 9 100.0 % - 19 / 19 + 3 / 3 100.0 % - 14 / 14 + 4 / 4 - abstract/RuleAddressSet + src/rules/operation
100.0%
100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 18 / 18 100.0 % - 8 / 8 + 6 / 6 + - + 0 / 0 - ../../../src/rules/operation/abstract + src/rules/validation/abstract/RuleERC2980
100.0%
100.0 % - 66 / 66 + 36 / 36 100.0 % - 18 / 18 + 12 / 12 100.0 % - 14 / 14 + 8 / 8 - deployment + src/rules/validation/deployment
100.0%
@@ -165,18 +177,6 @@ - 0 / 0 - - abstract/base - -
100.0%
- - 100.0 % - 378 / 378 - 100.0 % - 109 / 109 - 100.0 % - 109 / 109 -
diff --git a/doc/coverage/coverage/index.html b/doc/coverage/coverage/index.html index dde6e42..0394a54 100644 --- a/doc/coverage/coverage/index.html +++ b/doc/coverage/coverage/index.html @@ -31,26 +31,26 @@ lcov.info Lines: - 742 - 742 - 100.0 % + 764 + 781 + 97.8 % Date: - 2026-03-10 16:16:27 + 2026-04-16 15:29:51 Functions: - 268 - 268 - 100.0 % + 270 + 287 + 94.1 % Branches: - 159 - 159 + 161 + 161 100.0 % @@ -82,7 +82,7 @@ Branches Sort by branch coverage - ../../../src/modules + src/modules
100.0%
@@ -94,43 +94,43 @@ 4 / 4 - ../../../src/rules/operation + src/rules/operation
100.0%
100.0 % - 16 / 16 - 100.0 % - 9 / 9 + 18 / 18 100.0 % - 2 / 2 + 6 / 6 + - + 0 / 0 - ../../../src/rules/operation/abstract + src/rules/operation/abstract -
100.0%
+
97.4%97.4%
+ 97.4 % + 75 / 77 + 91.7 % + 22 / 24 100.0 % - 66 / 66 - 100.0 % - 18 / 18 - 100.0 % - 14 / 14 + 16 / 16 - abstract/RuleAddressSet + src/rules/validation/abstract/RuleAddressSet -
100.0%
+
96.3%96.3%
- 100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 96.3 % + 52 / 54 + 90.5 % + 19 / 21 100.0 % 8 / 8 - abstract/RuleERC2980 + src/rules/validation/abstract/RuleERC2980
100.0%
@@ -142,31 +142,31 @@ 8 / 8 - abstract/base + src/rules/validation/abstract/base -
100.0%
+
97.7%97.7%
+ 97.7 % + 385 / 394 + 92.4 % + 110 / 119 100.0 % - 378 / 378 - 100.0 % - 109 / 109 - 100.0 % - 109 / 109 + 111 / 111 - abstract/core + src/rules/validation/abstract/core -
100.0%
+
93.3%93.3%
- 100.0 % - 52 / 52 - 100.0 % - 19 / 19 + 93.3 % + 56 / 60 + 82.6 % + 19 / 23 100.0 % 14 / 14 - deployment + src/rules/validation/deployment
100.0%
diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html similarity index 63% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html rename to doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html index e3e217e..d4a9571 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/AccessControlModuleStandalone.sol - functions - + LCOV - lcov.info - src/modules/AccessControlModuleStandalone.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - ../../../src/modules - AccessControlModuleStandalone.sol (source / functions)top level - src/modules - AccessControlModuleStandalone.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 24 100.0 %
- - + + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
AccessControlModuleStandalone.constructor421AccessControlModuleStandalone.constructor430
AccessControlModuleStandalone.hasRole531AccessControlModuleStandalone.hasRole540

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func.html b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func.html similarity index 63% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func.html rename to doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func.html index be2519d..18223ea 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.func.html +++ b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/AccessControlModuleStandalone.sol - functions - + LCOV - lcov.info - src/modules/AccessControlModuleStandalone.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - ../../../src/modules - AccessControlModuleStandalone.sol (source / functions)top level - src/modules - AccessControlModuleStandalone.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 24 100.0 %
- - + + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
AccessControlModuleStandalone.constructor421AccessControlModuleStandalone.constructor430
AccessControlModuleStandalone.hasRole531AccessControlModuleStandalone.hasRole540

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.gcov.html b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.gcov.html similarity index 74% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.gcov.html rename to doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.gcov.html index a435a7b..494c0e8 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/AccessControlModuleStandalone.sol.gcov.html +++ b/doc/coverage/coverage/src/modules/AccessControlModuleStandalone.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/AccessControlModuleStandalone.sol - + LCOV - lcov.info - src/modules/AccessControlModuleStandalone.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - ../../../src/modules - AccessControlModuleStandalone.sol (source / functions)top level - src/modules - AccessControlModuleStandalone.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 24 100.0 %
@@ -74,54 +74,58 @@ 3 : : pragma solidity ^0.8.20; 4 : : 5 : : /* ==== OpenZeppelin === */ - 6 : : import {AccessControl} from "OZ/access/AccessControl.sol"; - 7 : : import {IAccessControl} from "OZ/access/IAccessControl.sol"; - 8 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; + 6 : : import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; + 7 : : import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; + 8 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; 9 : : 10 : : abstract contract AccessControlModuleStandalone is AccessControlEnumerable { 11 : : error AccessControlModuleStandalone_AddressZeroNotAllowed(); - 12 : : /* ============ Constructor ============ */ - 13 : : /** - 14 : : * @notice Assigns the provided address as the default admin. - 15 : : * @dev - 16 : : * - Reverts if `admin` is the zero address. - 17 : : * - Grants `DEFAULT_ADMIN_ROLE` to `admin`. - 18 : : * The return value of `_grantRole` is intentionally ignored, as it returns `false` - 19 : : * only when the role was already granted. - 20 : : * - 21 : : * @param admin The address that will receive the `DEFAULT_ADMIN_ROLE`. - 22 : : */ - 23 : : - 24 : 421 : constructor(address admin) { - 25 [ + + ]: 421 : require(admin != address(0), AccessControlModuleStandalone_AddressZeroNotAllowed()); - 26 : : // we don't check the return value - 27 : : // _grantRole attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. - 28 : : // return false only if the admin has already the role - 29 : 415 : _grantRole(DEFAULT_ADMIN_ROLE, admin); - 30 : : } - 31 : : - 32 : : /*////////////////////////////////////////////////////////////// - 33 : : PUBLIC/EXTERNAL FUNCTIONS - 34 : : //////////////////////////////////////////////////////////////*/ - 35 : : /** - 36 : : * @dev Returns `true` if `account` has been granted `role`. - 37 : : */ - 38 : 531 : function hasRole(bytes32 role, address account) - 39 : : public - 40 : : view - 41 : : virtual - 42 : : override(AccessControl, IAccessControl) - 43 : : returns (bool) - 44 : : { - 45 : : // Dev note: default admin is treated as having all roles but may not appear in enumerable role members. - 46 : : // The Default Admin has all roles - 47 [ + + ]: 3534 : if (AccessControl.hasRole(DEFAULT_ADMIN_ROLE, account)) { - 48 : 3021 : return true; - 49 : : } else { - 50 : 513 : return AccessControl.hasRole(role, account); - 51 : : } - 52 : : } - 53 : : } + 12 : : + 13 : : /*////////////////////////////////////////////////////////////// + 14 : : CONSTRUCTOR + 15 : : //////////////////////////////////////////////////////////////*/ + 16 : : + 17 : : /** + 18 : : * @notice Assigns the provided address as the default admin. + 19 : : * @dev + 20 : : * - Reverts if `admin` is the zero address. + 21 : : * - Grants `DEFAULT_ADMIN_ROLE` to `admin`. + 22 : : * The return value of `_grantRole` is intentionally ignored, as it returns `false` + 23 : : * only when the role was already granted. + 24 : : * + 25 : : * @param admin The address that will receive the `DEFAULT_ADMIN_ROLE`. + 26 : : */ + 27 : 430 : constructor(address admin) { + 28 [ + + ]: 430 : require(admin != address(0), AccessControlModuleStandalone_AddressZeroNotAllowed()); + 29 : : // we don't check the return value + 30 : : // _grantRole attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. + 31 : : // return false only if the admin has already the role + 32 : 424 : _grantRole(DEFAULT_ADMIN_ROLE, admin); + 33 : : } + 34 : : + 35 : : /*////////////////////////////////////////////////////////////// + 36 : : PUBLIC FUNCTIONS + 37 : : //////////////////////////////////////////////////////////////*/ + 38 : : + 39 : : /** + 40 : : * @dev Returns `true` if `account` has been granted `role`. + 41 : : */ + 42 : 540 : function hasRole(bytes32 role, address account) + 43 : : public + 44 : : view + 45 : : virtual + 46 : : override(AccessControl, IAccessControl) + 47 : : returns (bool) + 48 : : { + 49 : : // Dev note: default admin is treated as having all roles but may not appear in enumerable role members. + 50 : : // The Default Admin has all roles + 51 [ + + ]: 3627 : if (AccessControl.hasRole(DEFAULT_ADMIN_ROLE, account)) { + 52 : 3104 : return true; + 53 : : } else { + 54 : 523 : return AccessControl.hasRole(role, account); + 55 : : } + 56 : : } + 57 : : } @@ -129,7 +133,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func-sort-c.html b/doc/coverage/coverage/src/modules/VersionModule.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func-sort-c.html rename to doc/coverage/coverage/src/modules/VersionModule.sol.func-sort-c.html index 80489dc..5154c91 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/modules/VersionModule.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/VersionModule.sol - functions - + LCOV - lcov.info - src/modules/VersionModule.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - ../../../src/modules - VersionModule.sol (source / functions)top level - src/modules - VersionModule.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
VersionModule.versionVersionModule.version 7

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func.html b/doc/coverage/coverage/src/modules/VersionModule.sol.func.html similarity index 66% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func.html rename to doc/coverage/coverage/src/modules/VersionModule.sol.func.html index f548b23..df259b7 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.func.html +++ b/doc/coverage/coverage/src/modules/VersionModule.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/VersionModule.sol - functions - + LCOV - lcov.info - src/modules/VersionModule.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - ../../../src/modules - VersionModule.sol (source / functions)top level - src/modules - VersionModule.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
VersionModule.versionVersionModule.version 7

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.gcov.html b/doc/coverage/coverage/src/modules/VersionModule.sol.gcov.html similarity index 76% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.gcov.html rename to doc/coverage/coverage/src/modules/VersionModule.sol.gcov.html index ebeafe9..10bbfc1 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/modules/VersionModule.sol.gcov.html +++ b/doc/coverage/coverage/src/modules/VersionModule.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/modules/VersionModule.sol - + LCOV - lcov.info - src/modules/VersionModule.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - ../../../src/modules - VersionModule.sol (source / functions)top level - src/modules - VersionModule.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
@@ -79,13 +79,17 @@ 8 : : * @notice Exposes the contract version as required by ERC-3643. 9 : : */ 10 : : abstract contract VersionModule is IERC3643Version { - 11 : : string private constant VERSION = "0.2.0"; + 11 : : string private constant VERSION = "0.3.0"; 12 : : - 13 : : /// @inheritdoc IERC3643Version - 14 : 7 : function version() public view virtual override returns (string memory version_) { - 15 : 7 : return VERSION; - 16 : : } - 17 : : } + 13 : : /*////////////////////////////////////////////////////////////// + 14 : : PUBLIC FUNCTIONS + 15 : : //////////////////////////////////////////////////////////////*/ + 16 : : + 17 : : /// @inheritdoc IERC3643Version + 18 : 7 : function version() public view virtual override returns (string memory version_) { + 19 : 7 : return VERSION; + 20 : : } + 21 : : } @@ -93,7 +97,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-b.html b/doc/coverage/coverage/src/modules/index-sort-b.html similarity index 81% rename from doc/coverage/coverage/abstract/RuleAddressSet/index-sort-b.html rename to doc/coverage/coverage/src/modules/index-sort-b.html index bb7e3fe..b5c8072 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-b.html +++ b/doc/coverage/coverage/src/modules/index-sort-b.html @@ -4,7 +4,7 @@ - LCOV - lcov.info - abstract/RuleAddressSet + LCOV - lcov.info - src/modules @@ -19,7 +19,7 @@ - + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,8 +49,8 @@ - - + + @@ -82,26 +82,26 @@ - + - + - - - + + + - + - + - + diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-f.html b/doc/coverage/coverage/src/modules/index-sort-f.html similarity index 81% rename from doc/coverage/coverage/abstract/RuleAddressSet/index-sort-f.html rename to doc/coverage/coverage/src/modules/index-sort-f.html index a7bd900..73f9fb0 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-f.html +++ b/doc/coverage/coverage/src/modules/index-sort-f.html @@ -4,7 +4,7 @@ - LCOV - lcov.info - abstract/RuleAddressSet + LCOV - lcov.info - src/modules @@ -19,7 +19,7 @@
Current view:top level - abstract/RuleAddressSettop level - src/modules Hitlcov.info Lines:525299 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:191933 100.0 %
Branches:8844 100.0 %
Branches Sort by branch coverage
RuleAddressSet.solVersionModule.sol
100.0%
100.0 %34 / 342 / 2 100.0 %13 / 13100.0 %4 / 41 / 1-0 / 0
RuleAddressSetInternal.solAccessControlModuleStandalone.sol
100.0%
100.0 %18 / 187 / 7 100.0 %6 / 62 / 2 100.0 % 4 / 4
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,8 +49,8 @@ - - + + @@ -82,26 +82,26 @@ - + - + - - - + + + - + - + - + diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-l.html b/doc/coverage/coverage/src/modules/index-sort-l.html similarity index 81% rename from doc/coverage/coverage/abstract/RuleAddressSet/index-sort-l.html rename to doc/coverage/coverage/src/modules/index-sort-l.html index 5a6b041..9a0c19c 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/index-sort-l.html +++ b/doc/coverage/coverage/src/modules/index-sort-l.html @@ -4,7 +4,7 @@ - LCOV - lcov.info - abstract/RuleAddressSet + LCOV - lcov.info - src/modules @@ -19,7 +19,7 @@
Current view:top level - abstract/RuleAddressSettop level - src/modules Hitlcov.info Lines:525299 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:191933 100.0 %
Branches:8844 100.0 %
Branches Sort by branch coverage
RuleAddressSetInternal.solVersionModule.sol
100.0%
100.0 %18 / 182 / 2 100.0 %6 / 6100.0 %4 / 41 / 1-0 / 0
RuleAddressSet.solAccessControlModuleStandalone.sol
100.0%
100.0 %34 / 347 / 7 100.0 %13 / 132 / 2 100.0 % 4 / 4
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,8 +49,8 @@ - - + + @@ -82,26 +82,26 @@ - + - + - - - + + + - + - + - + diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/index.html b/doc/coverage/coverage/src/modules/index.html similarity index 81% rename from doc/coverage/coverage/abstract/RuleAddressSet/index.html rename to doc/coverage/coverage/src/modules/index.html index c9aa742..73f8778 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/index.html +++ b/doc/coverage/coverage/src/modules/index.html @@ -4,7 +4,7 @@ - LCOV - lcov.info - abstract/RuleAddressSet + LCOV - lcov.info - src/modules @@ -19,7 +19,7 @@
Current view:top level - abstract/RuleAddressSettop level - src/modules Hitlcov.info Lines:525299 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:191933 100.0 %
Branches:8844 100.0 %
Branches Sort by branch coverage
RuleAddressSetInternal.solVersionModule.sol
100.0%
100.0 %18 / 182 / 2 100.0 %6 / 6100.0 %4 / 41 / 1-0 / 0
RuleAddressSet.solAccessControlModuleStandalone.sol
100.0%
100.0 %34 / 347 / 7 100.0 %13 / 132 / 2 100.0 % 4 / 4
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,8 +49,8 @@ - - + + @@ -82,28 +82,28 @@ - + - + - + - + - + - - - + + +
Current view:top level - abstract/RuleAddressSettop level - src/modules Hitlcov.info Lines:525299 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:191933 100.0 %
Branches:8844 100.0 %
Branches Sort by branch coverage
RuleAddressSet.solAccessControlModuleStandalone.sol
100.0%
100.0 %34 / 347 / 7 100.0 %13 / 132 / 2 100.0 % 4 / 4
RuleAddressSetInternal.solVersionModule.sol
100.0%
100.0 %18 / 182 / 2 100.0 %6 / 6100.0 %4 / 41 / 1-0 / 0
diff --git a/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html new file mode 100644 index 0000000..a847612 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func-sort-c.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLight.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation - RuleConditionalTransferLight.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-04-16 15:29:51Functions:33100.0 %
Branches:00-
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLight.supportsInterface21
RuleConditionalTransferLight._onlyComplianceManager25
RuleConditionalTransferLight._authorizeTransferApproval1924
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func.html new file mode 100644 index 0000000..c28dd62 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.func.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLight.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation - RuleConditionalTransferLight.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:99100.0 %
Date:2026-04-16 15:29:51Functions:33100.0 %
Branches:00-
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLight._authorizeTransferApproval1924
RuleConditionalTransferLight._onlyComplianceManager25
RuleConditionalTransferLight.supportsInterface21
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html similarity index 64% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html rename to doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html index 9320c13..34c83af 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLight.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLight.sol - + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLight.sol + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - - + + + - +
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLight.sol (source / functions)top level - src/rules/operation - RuleConditionalTransferLight.sol (source / functions) Hitlcov.info Lines:111199 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:6633 100.0 %
Branches:22100.0 %00-
@@ -72,56 +72,58 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 5 : : import {IERC165} from "OZ/utils/introspection/IERC165.sol"; - 6 : : import {IRule} from "RuleEngine/interfaces/IRule.sol"; - 7 : : import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; - 8 : : import {AccessControlModuleStandalone} from "../../modules/AccessControlModuleStandalone.sol"; - 9 : : import {ERC3643ComplianceModule} from "RuleEngine/modules/ERC3643ComplianceModule.sol"; - 10 : : import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; - 11 : : - 12 : : /** - 13 : : * @title ConditionalTransferLight - 14 : : * @dev Requires operator approval for each transfer. Same transfer (from, to, value) - 15 : : * can be approved multiple times to allow repeated transfers. - 16 : : */ - 17 : : contract RuleConditionalTransferLight is - 18 : : AccessControlModuleStandalone, - 19 : : ERC3643ComplianceModule, - 20 : : RuleConditionalTransferLightBase - 21 : : { - 22 : : /** - 23 : : * @param admin Address of the contract admin. - 24 : : */ - 25 : : constructor(address admin) AccessControlModuleStandalone(admin) {} - 26 : : - 27 : 18 : function supportsInterface(bytes4 interfaceId) - 28 : : public - 29 : : view - 30 : : virtual - 31 : : override(AccessControlEnumerable, IERC165) - 32 : : returns (bool) - 33 : : { - 34 : 18 : return interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID || interfaceId == type(IRule).interfaceId - 35 : 11 : || AccessControlEnumerable.supportsInterface(interfaceId); - 36 : : } - 37 : : - 38 : 1 : function created(address to, uint256 value) external onlyBoundToken { - 39 : 1 : _transferred(address(0), to, value); - 40 : : } - 41 : : - 42 : 1 : function destroyed(address from, uint256 value) external onlyBoundToken { - 43 : 1 : _transferred(from, address(0), value); - 44 : : } - 45 : : - 46 : 1848 : function _authorizeTransferApproval() internal view virtual override onlyRole(OPERATOR_ROLE) {} + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 5 : : import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + 6 : : import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; + 7 : : import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; + 8 : : import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; + 9 : : import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; + 10 : : import {IERC3643ComplianceFull} from "../../mocks/IERC3643ComplianceFull.sol"; + 11 : : import {AccessControlModuleStandalone} from "../../modules/AccessControlModuleStandalone.sol"; + 12 : : import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; + 13 : : + 14 : : /** + 15 : : * @title ConditionalTransferLight + 16 : : * @dev Requires operator approval for each transfer. Same transfer (from, to, value) + 17 : : * can be approved multiple times to allow repeated transfers. + 18 : : */ + 19 : : contract RuleConditionalTransferLight is AccessControlModuleStandalone, RuleConditionalTransferLightBase { + 20 : : /*////////////////////////////////////////////////////////////// + 21 : : CONSTRUCTOR + 22 : : //////////////////////////////////////////////////////////////*/ + 23 : : + 24 : : /** + 25 : : * @param admin Address of the contract admin. + 26 : : */ + 27 : : constructor(address admin) AccessControlModuleStandalone(admin) {} + 28 : : + 29 : : /*////////////////////////////////////////////////////////////// + 30 : : PUBLIC FUNCTIONS + 31 : : //////////////////////////////////////////////////////////////*/ + 32 : : + 33 : 21 : function supportsInterface(bytes4 interfaceId) + 34 : : public + 35 : : view + 36 : : virtual + 37 : : override(AccessControlEnumerable, IERC165) + 38 : : returns (bool) + 39 : : { + 40 : 21 : return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + 41 : 20 : || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + 42 : 19 : || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + 43 : 13 : || interfaceId == type(IERC7551Compliance).interfaceId + 44 : 12 : || interfaceId == type(IERC3643ComplianceFull).interfaceId + 45 : 11 : || AccessControlEnumerable.supportsInterface(interfaceId); + 46 : : } 47 : : - 48 : 770 : function _authorizeTransferExecution() internal view virtual override { - 49 [ + + ]: 770 : require(isTokenBound(_msgSender()), RuleConditionalTransferLight_TransferExecutorUnauthorized(_msgSender())); - 50 : : } + 48 : : /*////////////////////////////////////////////////////////////// + 49 : : ACCESS CONTROL + 50 : : //////////////////////////////////////////////////////////////*/ 51 : : - 52 : 19 : function _onlyComplianceManager() internal virtual override onlyRole(COMPLIANCE_MANAGER_ROLE) {} - 53 : : } + 52 : 1924 : function _authorizeTransferApproval() internal view virtual override onlyRole(OPERATOR_ROLE) {} + 53 : : + 54 : 25 : function _onlyComplianceManager() internal virtual override onlyRole(COMPLIANCE_MANAGER_ROLE) {} + 55 : : } @@ -129,7 +131,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html similarity index 62% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html index 191f539..ae97ffa 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,13 +31,13 @@ - - + + - + @@ -53,38 +53,38 @@ - +
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions)top level - src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions) Hitlcov.info Lines:5599 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 30 -
- - + + - + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightOwnable2Step._authorizeTransferExecutionRuleConditionalTransferLightOwnable2Step._onlyComplianceManager 3
RuleConditionalTransferLightOwnable2Step._authorizeTransferApprovalRuleConditionalTransferLightOwnable2Step._authorizeTransferApproval 4
RuleConditionalTransferLightOwnable2Step.supportsInterface4RuleConditionalTransferLightOwnable2Step.supportsInterface7

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html similarity index 62% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html index 12bc2cf..cc07253 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,13 +31,13 @@ - - + + - + @@ -53,38 +53,38 @@ - +
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions)top level - src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions) Hitlcov.info Lines:5599 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 30 -
- - + + - + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightOwnable2Step._authorizeTransferApprovalRuleConditionalTransferLightOwnable2Step._authorizeTransferApproval 4
RuleConditionalTransferLightOwnable2Step._authorizeTransferExecutionRuleConditionalTransferLightOwnable2Step._onlyComplianceManager 3
RuleConditionalTransferLightOwnable2Step.supportsInterface4RuleConditionalTransferLightOwnable2Step.supportsInterface7

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html similarity index 51% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html index b05073e..221d711 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol - + LCOV - lcov.info - src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -31,13 +31,13 @@ - - + + - + @@ -53,12 +53,12 @@ - +
Current view:top level - ../../../src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions)top level - src/rules/operation - RuleConditionalTransferLightOwnable2Step.sol (source / functions) Hitlcov.info Lines:5599 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 30 -
@@ -72,29 +72,48 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {IRule} from "RuleEngine/interfaces/IRule.sol"; - 7 : : import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; - 8 : : import {IERC165} from "OZ/utils/introspection/IERC165.sol"; - 9 : : import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; - 10 : : - 11 : : /** - 12 : : * @title RuleConditionalTransferLightOwnable2Step - 13 : : * @notice Ownable2Step variant of RuleConditionalTransferLight. - 14 : : */ - 15 : : contract RuleConditionalTransferLightOwnable2Step is RuleConditionalTransferLightBase, Ownable2Step { - 16 : : constructor(address owner) Ownable(owner) {} - 17 : : - 18 : 4 : function supportsInterface(bytes4 interfaceId) public view override returns (bool) { - 19 : 4 : return interfaceId == type(IERC165).interfaceId || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID - 20 : 2 : || interfaceId == type(IRule).interfaceId; - 21 : : } + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; + 7 : : import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + 8 : : import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; + 9 : : import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; + 10 : : import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; + 11 : : import {IERC3643ComplianceFull} from "../../mocks/IERC3643ComplianceFull.sol"; + 12 : : import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; + 13 : : + 14 : : /** + 15 : : * @title RuleConditionalTransferLightOwnable2Step + 16 : : * @notice Ownable2Step variant of RuleConditionalTransferLight. + 17 : : */ + 18 : : contract RuleConditionalTransferLightOwnable2Step is RuleConditionalTransferLightBase, Ownable2Step { + 19 : : /*////////////////////////////////////////////////////////////// + 20 : : CONSTRUCTOR + 21 : : //////////////////////////////////////////////////////////////*/ 22 : : - 23 : 4 : function _authorizeTransferApproval() internal view virtual override onlyOwner {} + 23 : : constructor(address owner) Ownable(owner) {} 24 : : - 25 : 3 : function _authorizeTransferExecution() internal view virtual override onlyOwner {} - 26 : : } + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : PUBLIC FUNCTIONS + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : + 29 : 7 : function supportsInterface(bytes4 interfaceId) public view override returns (bool) { + 30 : 7 : return interfaceId == type(IERC165).interfaceId + 31 : 6 : || interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + 32 : 5 : || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + 33 : 4 : || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + 34 : 3 : || interfaceId == type(IERC7551Compliance).interfaceId + 35 : 2 : || interfaceId == type(IERC3643ComplianceFull).interfaceId; + 36 : : } + 37 : : + 38 : : /*////////////////////////////////////////////////////////////// + 39 : : ACCESS CONTROL + 40 : : //////////////////////////////////////////////////////////////*/ + 41 : : + 42 : 4 : function _authorizeTransferApproval() internal view virtual override onlyOwner {} + 43 : : + 44 : 3 : function _onlyComplianceManager() internal virtual override onlyOwner {} + 45 : : } @@ -102,7 +121,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func-sort-c.html new file mode 100644 index 0000000..58e7df6 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func-sort-c.html @@ -0,0 +1,125 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstract - RuleConditionalTransferLightApprovalBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:353794.6 %
Date:2026-04-16 15:29:51Functions:91181.8 %
Branches:55100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightApprovalBase._authorizeTransferApproval0
RuleConditionalTransferLightApprovalBase._authorizeTransferExecution0
RuleConditionalTransferLightApprovalBase._transferredFromContext3
RuleConditionalTransferLightApprovalBase.onlyTransferExecutor3
RuleConditionalTransferLightApprovalBase.transferred3
RuleConditionalTransferLightApprovalBase.cancelTransferApproval4
RuleConditionalTransferLightApprovalBase.onlyTransferApprover4
RuleConditionalTransferLightApprovalBase.approvedCount263
RuleConditionalTransferLightApprovalBase._transferred850
RuleConditionalTransferLightApprovalBase.approveTransfer1917
RuleConditionalTransferLightApprovalBase._transferHash3039
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func.html new file mode 100644 index 0000000..eed496c --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.func.html @@ -0,0 +1,125 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstract - RuleConditionalTransferLightApprovalBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:353794.6 %
Date:2026-04-16 15:29:51Functions:91181.8 %
Branches:55100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightApprovalBase._authorizeTransferApproval0
RuleConditionalTransferLightApprovalBase._authorizeTransferExecution0
RuleConditionalTransferLightApprovalBase._transferHash3039
RuleConditionalTransferLightApprovalBase._transferred850
RuleConditionalTransferLightApprovalBase._transferredFromContext3
RuleConditionalTransferLightApprovalBase.approveTransfer1917
RuleConditionalTransferLightApprovalBase.approvedCount263
RuleConditionalTransferLightApprovalBase.cancelTransferApproval4
RuleConditionalTransferLightApprovalBase.onlyTransferApprover4
RuleConditionalTransferLightApprovalBase.onlyTransferExecutor3
RuleConditionalTransferLightApprovalBase.transferred3
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.gcov.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.gcov.html new file mode 100644 index 0000000..2388ee3 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol.gcov.html @@ -0,0 +1,181 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstract - RuleConditionalTransferLightApprovalBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:353794.6 %
Date:2026-04-16 15:29:51Functions:91181.8 %
Branches:55100.0 %
+
+ + + + + + + + +

+
           Branch data     Line data    Source code
+
+       1                 :            : // SPDX-License-Identifier: MPL-2.0
+       2                 :            : pragma solidity ^0.8.20;
+       3                 :            : 
+       4                 :            : import {ITransferContext} from "../../interfaces/ITransferContext.sol";
+       5                 :            : import {RuleConditionalTransferLightInvariantStorage} from "./RuleConditionalTransferLightInvariantStorage.sol";
+       6                 :            : 
+       7                 :            : /**
+       8                 :            :  * @title RuleConditionalTransferLightApprovalBase
+       9                 :            :  * @dev Pure approval state machine: stores and consumes per-transfer approvals.
+      10                 :            :  *      No knowledge of token binding or compliance interfaces.
+      11                 :            :  */
+      12                 :            : abstract contract RuleConditionalTransferLightApprovalBase is RuleConditionalTransferLightInvariantStorage {
+      13                 :            :     // Mapping from transfer hash to approval count
+      14                 :            :     mapping(bytes32 => uint256) public approvalCounts;
+      15                 :            : 
+      16                 :            :     /*//////////////////////////////////////////////////////////////
+      17                 :            :                         ACCESS CONTROL
+      18                 :            :     //////////////////////////////////////////////////////////////*/
+      19                 :            : 
+      20                 :          4 :     modifier onlyTransferApprover() {
+      21                 :          4 :         _authorizeTransferApproval();
+      22                 :            :         _;
+      23                 :            :     }
+      24                 :            : 
+      25                 :          3 :     modifier onlyTransferExecutor() {
+      26                 :          3 :         _authorizeTransferExecution();
+      27                 :            :         _;
+      28                 :            :     }
+      29                 :            : 
+      30                 :          0 :     function _authorizeTransferApproval() internal view virtual;
+      31                 :            : 
+      32                 :          0 :     function _authorizeTransferExecution() internal view virtual;
+      33                 :            : 
+      34                 :            :     /*//////////////////////////////////////////////////////////////
+      35                 :            :                         EXTERNAL FUNCTIONS
+      36                 :            :     //////////////////////////////////////////////////////////////*/
+      37                 :            : 
+      38                 :          3 :     function transferred(ITransferContext.FungibleTransferContext calldata ctx) external onlyTransferExecutor {
+      39                 :          3 :         _transferredFromContext(ctx);
+      40                 :            :     }
+      41                 :            : 
+      42                 :            :     /*//////////////////////////////////////////////////////////////
+      43                 :            :                         PUBLIC FUNCTIONS
+      44                 :            :     //////////////////////////////////////////////////////////////*/
+      45                 :            : 
+      46                 :       1917 :     function approveTransfer(address from, address to, uint256 value) public onlyTransferApprover {
+      47                 :       1918 :         bytes32 transferHash = _transferHash(from, to, value);
+      48                 :       1918 :         approvalCounts[transferHash] += 1;
+      49                 :       1918 :         emit TransferApproved(from, to, value, approvalCounts[transferHash]);
+      50                 :            :     }
+      51                 :            : 
+      52                 :          4 :     function cancelTransferApproval(address from, address to, uint256 value) public onlyTransferApprover {
+      53                 :          3 :         bytes32 transferHash = _transferHash(from, to, value);
+      54                 :          3 :         uint256 count = approvalCounts[transferHash];
+      55         [ +  + ]:          3 :         require(count != 0, TransferApprovalNotFound());
+      56                 :          2 :         approvalCounts[transferHash] = count - 1;
+      57                 :          2 :         emit TransferApprovalCancelled(from, to, value, approvalCounts[transferHash]);
+      58                 :            :     }
+      59                 :            : 
+      60                 :        263 :     function approvedCount(address from, address to, uint256 value) public view returns (uint256) {
+      61                 :        263 :         bytes32 transferHash = _transferHash(from, to, value);
+      62                 :        263 :         return approvalCounts[transferHash];
+      63                 :            :     }
+      64                 :            : 
+      65                 :            :     /*//////////////////////////////////////////////////////////////
+      66                 :            :                         INTERNAL FUNCTIONS
+      67                 :            :     //////////////////////////////////////////////////////////////*/
+      68                 :            : 
+      69                 :          3 :     function _transferredFromContext(ITransferContext.FungibleTransferContext calldata ctx) internal virtual {
+      70                 :          3 :         _transferred(ctx.from, ctx.to, ctx.value);
+      71                 :            :     }
+      72                 :            : 
+      73                 :        850 :     function _transferred(address from, address to, uint256 value) internal virtual {
+      74            [ + ]:        850 :         if (from == address(0) || to == address(0)) {
+      75                 :        850 :             return;
+      76                 :            :         }
+      77                 :        846 :         bytes32 transferHash = _transferHash(from, to, value);
+      78                 :        846 :         uint256 count = approvalCounts[transferHash];
+      79                 :            : 
+      80         [ +  + ]:        846 :         require(count != 0, TransferNotApproved());
+      81                 :            : 
+      82                 :        843 :         approvalCounts[transferHash] = count - 1;
+      83                 :        843 :         emit TransferExecuted(from, to, value, approvalCounts[transferHash]);
+      84                 :            :     }
+      85                 :            : 
+      86                 :       3039 :     function _transferHash(address from, address to, uint256 value) internal pure virtual returns (bytes32 hash) {
+      87                 :            :         // Linter suggestion (`asm-keccak256`): hash packed values in assembly to avoid abi.encodePacked overhead.
+      88                 :            :         assembly ("memory-safe") {
+      89                 :       3039 :             let ptr := mload(0x40)
+      90                 :       3039 :             mstore(ptr, shl(96, from))
+      91                 :       3039 :             mstore(add(ptr, 0x20), shl(96, to))
+      92                 :       3039 :             mstore(add(ptr, 0x40), value)
+      93                 :       3039 :             hash := keccak256(ptr, 0x60)
+      94                 :            :         }
+      95                 :            :     }
+      96                 :            : }
+
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html new file mode 100644 index 0000000..bfc1a7f --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func-sort-c.html @@ -0,0 +1,133 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightBase.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:4040100.0 %
Date:2026-04-16 15:29:51Functions:1313100.0 %
Branches:1111100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightBase.canReturnTransferRestrictionCode1
RuleConditionalTransferLightBase.canTransferFrom1
RuleConditionalTransferLightBase.created1
RuleConditionalTransferLightBase.destroyed1
RuleConditionalTransferLightBase.detectTransferRestrictionFrom1
RuleConditionalTransferLightBase.transferred.11
RuleConditionalTransferLightBase.messageForTransferRestriction2
RuleConditionalTransferLightBase.approveAndTransferIfAllowed4
RuleConditionalTransferLightBase.canTransfer4
RuleConditionalTransferLightBase.detectTransferRestriction7
RuleConditionalTransferLightBase.bindToken27
RuleConditionalTransferLightBase.transferred.0846
RuleConditionalTransferLightBase._authorizeTransferExecution850
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html new file mode 100644 index 0000000..3893954 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.func.html @@ -0,0 +1,133 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightBase.sol - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions)HitTotalCoverage
Test:lcov.infoLines:4040100.0 %
Date:2026-04-16 15:29:51Functions:1313100.0 %
Branches:1111100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
RuleConditionalTransferLightBase._authorizeTransferExecution850
RuleConditionalTransferLightBase.approveAndTransferIfAllowed4
RuleConditionalTransferLightBase.bindToken27
RuleConditionalTransferLightBase.canReturnTransferRestrictionCode1
RuleConditionalTransferLightBase.canTransfer4
RuleConditionalTransferLightBase.canTransferFrom1
RuleConditionalTransferLightBase.created1
RuleConditionalTransferLightBase.destroyed1
RuleConditionalTransferLightBase.detectTransferRestriction7
RuleConditionalTransferLightBase.detectTransferRestrictionFrom1
RuleConditionalTransferLightBase.messageForTransferRestriction2
RuleConditionalTransferLightBase.transferred.0846
RuleConditionalTransferLightBase.transferred.11
+
+
+ + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html similarity index 60% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html index e80e06d..2084755 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation/abstract/RuleConditionalTransferLightBase.sol - + LCOV - lcov.info - src/rules/operation/abstract/RuleConditionalTransferLightBase.sol + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - + + - +
Current view:top level - ../../../src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions)top level - src/rules/operation/abstract - RuleConditionalTransferLightBase.sol (source / functions) Hitlcov.info Lines:66664040 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:18181313 100.0 %
Branches:14141111 100.0 %
@@ -77,204 +77,174 @@ 6 : : import {IERC3643ComplianceRead, IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; 7 : : import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; 8 : : import {IRule} from "RuleEngine/interfaces/IRule.sol"; - 9 : : import {ITransferContext} from "../../interfaces/ITransferContext.sol"; - 10 : : import {IERC20} from "OZ/token/ERC20/IERC20.sol"; - 11 : : import {RuleConditionalTransferLightInvariantStorage} from "./RuleConditionalTransferLightInvariantStorage.sol"; - 12 : : import {VersionModule} from "../../../modules/VersionModule.sol"; - 13 : : - 14 : : /** - 15 : : * @title RuleConditionalTransferLightBase - 16 : : * @dev Requires operator approval for each transfer. Same transfer (from, to, value) - 17 : : * can be approved multiple times to allow repeated transfers. - 18 : : */ - 19 : : abstract contract RuleConditionalTransferLightBase is - 20 : : VersionModule, - 21 : : RuleConditionalTransferLightInvariantStorage, - 22 : : IRule - 23 : : { - 24 : : // Mapping from transfer hash to approval count - 25 : : mapping(bytes32 => uint256) public approvalCounts; - 26 : : - 27 : 1841 : function approveTransfer(address from, address to, uint256 value) public onlyTransferApprover { - 28 : 1842 : bytes32 transferHash = _transferHash(from, to, value); - 29 : 1842 : approvalCounts[transferHash] += 1; - 30 : 1842 : emit TransferApproved(from, to, value, approvalCounts[transferHash]); - 31 : : } - 32 : : - 33 : 4 : function cancelTransferApproval(address from, address to, uint256 value) public onlyTransferApprover { - 34 : 3 : bytes32 transferHash = _transferHash(from, to, value); - 35 : 3 : uint256 count = approvalCounts[transferHash]; - 36 [ + + ]: 3 : require(count != 0, TransferApprovalNotFound()); - 37 : 2 : approvalCounts[transferHash] = count - 1; - 38 : 2 : emit TransferApprovalCancelled(from, to, value, approvalCounts[transferHash]); - 39 : : } - 40 : : - 41 : : /** - 42 : : * @notice Approves and performs a transferFrom using this rule as spender. - 43 : : * @dev Requires `from` to have approved this contract on the token. - 44 : : * @dev This function is only safe for tokens that call back `transferred()` during transfer. - 45 : : * @dev CEI is intentionally inverted so the approval exists for the callback. - 46 : : */ - 47 : 4 : function approveAndTransferIfAllowed(address token, address from, address to, uint256 value) - 48 : : public - 49 : : onlyTransferApprover - 50 : : returns (bool) - 51 : : { - 52 [ + + ]: 4 : require(token != address(0), RuleConditionalTransferLight_TokenAddressZeroNotAllowed()); - 53 : : - 54 : 3 : approveTransfer(from, to, value); + 9 : : import {ERC3643ComplianceModule} from "RuleEngine/modules/ERC3643ComplianceModule.sol"; + 10 : : import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + 11 : : import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; + 12 : : import {RuleConditionalTransferLightApprovalBase} from "./RuleConditionalTransferLightApprovalBase.sol"; + 13 : : import {VersionModule} from "../../../modules/VersionModule.sol"; + 14 : : + 15 : : /** + 16 : : * @title RuleConditionalTransferLightBase + 17 : : * @dev Wires the approval state machine into the ERC-3643 / ERC-1404 / IRule compliance + 18 : : * interface layer and enforces single-token binding. + 19 : : */ + 20 : : abstract contract RuleConditionalTransferLightBase is + 21 : : VersionModule, + 22 : : ERC3643ComplianceModule, + 23 : : RuleConditionalTransferLightApprovalBase, + 24 : : IRule + 25 : : { + 26 : : using SafeERC20 for IERC20; + 27 : : + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : EXTERNAL FUNCTIONS + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : 1 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { + 33 : 1 : return restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED; + 34 : : } + 35 : : + 36 : 2 : function messageForTransferRestriction(uint8 restrictionCode) + 37 : : external + 38 : : pure + 39 : : override(IERC1404) + 40 : : returns (string memory) + 41 : : { + 42 [ + ]: 2 : if (restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED) { + 43 : 1 : return TEXT_TRANSFER_REQUEST_NOT_APPROVED; + 44 : : } + 45 : 1 : return TEXT_CODE_NOT_FOUND; + 46 : : } + 47 : : + 48 : 1 : function created(address to, uint256 value) external onlyBoundToken { + 49 : 1 : _transferred(address(0), to, value); + 50 : : } + 51 : : + 52 : 1 : function destroyed(address from, uint256 value) external onlyBoundToken { + 53 : 1 : _transferred(from, address(0), value); + 54 : : } 55 : : - 56 : 3 : uint256 allowed = IERC20(token).allowance(from, address(this)); - 57 [ + + ]: 3 : require(allowed >= value, RuleConditionalTransferLight_InsufficientAllowance(token, from, allowed, value)); - 58 : : - 59 : 2 : bool success = IERC20(token).transferFrom(from, to, value); - 60 [ + + ]: 2 : require(success, RuleConditionalTransferLight_TransferFailed()); - 61 : 1 : return true; - 62 : : } - 63 : : - 64 : 263 : function approvedCount(address from, address to, uint256 value) public view returns (uint256) { - 65 : 263 : bytes32 transferHash = _transferHash(from, to, value); - 66 : 263 : return approvalCounts[transferHash]; - 67 : : } - 68 : : - 69 : 769 : function transferred(address from, address to, uint256 value) - 70 : : public - 71 : : override(IERC3643IComplianceContract) - 72 : : onlyTransferExecutor - 73 : : { - 74 : 767 : _transferred(from, to, value); - 75 : : } - 76 : : - 77 : 1 : function transferred( - 78 : : address, - 79 : : /* spender */ - 80 : : address from, - 81 : : address to, - 82 : : uint256 value - 83 : : ) + 56 : : /*////////////////////////////////////////////////////////////// + 57 : : PUBLIC FUNCTIONS + 58 : : //////////////////////////////////////////////////////////////*/ + 59 : : + 60 : : /** + 61 : : * @notice Approves and performs a transferFrom using this rule as spender. + 62 : : * @dev Requires `from` to have approved this contract on the token. + 63 : : * @dev This function is only safe for tokens that call back `transferred()` during transfer. + 64 : : * @dev CEI is intentionally inverted so the approval exists for the callback. + 65 : : */ + 66 : 4 : function approveAndTransferIfAllowed(address from, address to, uint256 value) + 67 : : public + 68 : : onlyTransferApprover + 69 : : returns (bool) + 70 : : { + 71 : 4 : address token = getTokenBound(); + 72 [ + + ]: 4 : require(token != address(0), RuleConditionalTransferLight_TokenNotBound()); + 73 : : + 74 : 3 : approveTransfer(from, to, value); + 75 : : + 76 : 3 : uint256 allowed = IERC20(token).allowance(from, address(this)); + 77 [ + + ]: 3 : require(allowed >= value, RuleConditionalTransferLight_InsufficientAllowance(token, from, allowed, value)); + 78 : : + 79 : 2 : IERC20(token).safeTransferFrom(from, to, value); + 80 : 1 : return true; + 81 : : } + 82 : : + 83 : 846 : function transferred(address from, address to, uint256 value) 84 : : public - 85 : : override(IRuleEngine) + 85 : : override(IERC3643IComplianceContract) 86 : : onlyTransferExecutor 87 : : { - 88 : 1 : _transferred(from, to, value); + 88 : 844 : _transferred(from, to, value); 89 : : } 90 : : - 91 : 7 : function detectTransferRestriction(address from, address to, uint256 value) - 92 : : public - 93 : : view - 94 : : override(IERC1404) - 95 : : returns (uint8) - 96 : : { - 97 [ + ]: 13 : if (from == address(0) || to == address(0)) { - 98 : 4 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 99 : : } - 100 : 9 : bytes32 transferHash = _transferHash(from, to, value); - 101 [ + ]: 9 : if (approvalCounts[transferHash] == 0) { - 102 : 6 : return CODE_TRANSFER_REQUEST_NOT_APPROVED; - 103 : : } - 104 : 3 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 105 : : } - 106 : : - 107 : 1 : function detectTransferRestrictionFrom( - 108 : : address, - 109 : : /* spender */ - 110 : : address from, - 111 : : address to, - 112 : : uint256 value - 113 : : ) - 114 : : public - 115 : : view - 116 : : override(IERC1404Extend) - 117 : : returns (uint8) - 118 : : { - 119 : 2 : return detectTransferRestriction(from, to, value); - 120 : : } - 121 : : - 122 : 4 : function canTransfer(address from, address to, uint256 value) - 123 : : public - 124 : : view - 125 : : override(IERC3643ComplianceRead) - 126 : : returns (bool) - 127 : : { - 128 : 4 : return detectTransferRestriction(from, to, value) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 129 : : } - 130 : : - 131 : 1 : function canTransferFrom(address spender, address from, address to, uint256 value) - 132 : : public - 133 : : view - 134 : : override(IERC7551Compliance) - 135 : : returns (bool) - 136 : : { - 137 : 1 : return detectTransferRestrictionFrom(spender, from, to, value) - 138 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 139 : : } - 140 : : - 141 : 1 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { - 142 : 1 : return restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED; - 143 : : } - 144 : : - 145 : 2 : function messageForTransferRestriction(uint8 restrictionCode) - 146 : : external - 147 : : pure - 148 : : override(IERC1404) - 149 : : returns (string memory) - 150 : : { - 151 [ + ]: 2 : if (restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED) { - 152 : 1 : return TEXT_TRANSFER_REQUEST_NOT_APPROVED; - 153 : : } - 154 : 1 : return TEXT_CODE_NOT_FOUND; - 155 : : } - 156 : : - 157 : 3 : function transferred(ITransferContext.FungibleTransferContext calldata ctx) external onlyTransferExecutor { - 158 : 3 : _transferredFromContext(ctx); - 159 : : } - 160 : : - 161 : 3 : function _transferredFromContext(ITransferContext.FungibleTransferContext calldata ctx) internal virtual { - 162 : 3 : _transferred(ctx.from, ctx.to, ctx.value); - 163 : : } - 164 : : - 165 : 773 : function _transferred(address from, address to, uint256 value) internal virtual { - 166 [ + ]: 773 : if (from == address(0) || to == address(0)) { - 167 : 773 : return; - 168 : : } - 169 : 768 : bytes32 transferHash = _transferHash(from, to, value); - 170 : 768 : uint256 count = approvalCounts[transferHash]; - 171 : : - 172 [ + + ]: 768 : require(count != 0, TransferNotApproved()); - 173 : : - 174 : 765 : approvalCounts[transferHash] = count - 1; - 175 : 765 : emit TransferExecuted(from, to, value, approvalCounts[transferHash]); - 176 : : } - 177 : : - 178 : 2885 : function _transferHash(address from, address to, uint256 value) internal pure virtual returns (bytes32 hash) { - 179 : : // Linter suggestion (`asm-keccak256`): hash packed values in assembly to avoid abi.encodePacked overhead. - 180 : : assembly ("memory-safe") { - 181 : 2885 : let ptr := mload(0x40) - 182 : 2885 : mstore(ptr, shl(96, from)) - 183 : 2885 : mstore(add(ptr, 0x20), shl(96, to)) - 184 : 2885 : mstore(add(ptr, 0x40), value) - 185 : 2885 : hash := keccak256(ptr, 0x60) - 186 : : } - 187 : : } - 188 : : - 189 : : /*////////////////////////////////////////////////////////////// - 190 : : ACCESS CONTROL - 191 : : //////////////////////////////////////////////////////////////*/ - 192 : : - 193 : 4 : modifier onlyTransferApprover() { - 194 : 4 : _authorizeTransferApproval(); - 195 : : _; - 196 : : } - 197 : : - 198 : 3 : modifier onlyTransferExecutor() { - 199 : 3 : _authorizeTransferExecution(); - 200 : : _; - 201 : : } - 202 : : - 203 : : function _authorizeTransferApproval() internal view virtual; - 204 : : - 205 : : function _authorizeTransferExecution() internal view virtual; - 206 : : } + 91 : 1 : function transferred( + 92 : : address, + 93 : : /* spender */ + 94 : : address from, + 95 : : address to, + 96 : : uint256 value + 97 : : ) + 98 : : public + 99 : : override(IRuleEngine) + 100 : : onlyTransferExecutor + 101 : : { + 102 : 1 : _transferred(from, to, value); + 103 : : } + 104 : : + 105 : : /** + 106 : : * @notice Binds a token to this rule. Reverts if a token is already bound. + 107 : : * @dev Enforces single-token binding to prevent cross-token approval replay. + 108 : : * To migrate to a new token, call `unbindToken` first. + 109 : : * @dev WARNING: `unbindToken` does not clear `approvalCounts`. Stale approvals + 110 : : * from the previous token remain in storage and can be consumed after rebinding. + 111 : : * The operator who controls rebinding also controls approvals, so the trust + 112 : : * model is preserved, but integrators should be aware of this behavior. + 113 : : */ + 114 : 27 : function bindToken(address token) public override onlyComplianceManager { + 115 [ + + ]: 26 : require(getTokenBound() == address(0), RuleConditionalTransferLight_TokenAlreadyBound()); + 116 : 25 : _bindToken(token); + 117 : : } + 118 : : + 119 : 7 : function detectTransferRestriction(address from, address to, uint256 value) + 120 : : public + 121 : : view + 122 : : override(IERC1404) + 123 : : returns (uint8) + 124 : : { + 125 [ + ]: 13 : if (from == address(0) || to == address(0)) { + 126 : 4 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 127 : : } + 128 : 9 : bytes32 transferHash = _transferHash(from, to, value); + 129 [ + ]: 9 : if (approvalCounts[transferHash] == 0) { + 130 : 6 : return CODE_TRANSFER_REQUEST_NOT_APPROVED; + 131 : : } + 132 : 3 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 133 : : } + 134 : : + 135 : 1 : function detectTransferRestrictionFrom( + 136 : : address, + 137 : : /* spender */ + 138 : : address from, + 139 : : address to, + 140 : : uint256 value + 141 : : ) + 142 : : public + 143 : : view + 144 : : override(IERC1404Extend) + 145 : : returns (uint8) + 146 : : { + 147 : 2 : return detectTransferRestriction(from, to, value); + 148 : : } + 149 : : + 150 : 4 : function canTransfer(address from, address to, uint256 value) + 151 : : public + 152 : : view + 153 : : override(IERC3643ComplianceRead) + 154 : : returns (bool) + 155 : : { + 156 : 4 : return detectTransferRestriction(from, to, value) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 157 : : } + 158 : : + 159 : 1 : function canTransferFrom(address spender, address from, address to, uint256 value) + 160 : : public + 161 : : view + 162 : : override(IERC7551Compliance) + 163 : : returns (bool) + 164 : : { + 165 : 1 : return detectTransferRestrictionFrom(spender, from, to, value) + 166 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 167 : : } + 168 : : + 169 : : /*////////////////////////////////////////////////////////////// + 170 : : ACCESS CONTROL + 171 : : //////////////////////////////////////////////////////////////*/ + 172 : : + 173 : 850 : function _authorizeTransferExecution() internal view override { + 174 [ + + ]: 850 : require(isTokenBound(_msgSender()), RuleConditionalTransferLight_TransferExecutorUnauthorized(_msgSender())); + 175 : : } + 176 : : } @@ -282,7 +252,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/src/rules/operation/abstract/index-sort-b.html b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-b.html new file mode 100644 index 0000000..b4ec123 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-b.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:757797.4 %
Date:2026-04-16 15:29:51Functions:222491.7 %
Branches:1616100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightApprovalBase.sol +
94.6%94.6%
+
94.6 %35 / 3781.8 %9 / 11100.0 %5 / 5
RuleConditionalTransferLightBase.sol +
100.0%
+
100.0 %40 / 40100.0 %13 / 13100.0 %11 / 11
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/index-sort-f.html b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-f.html new file mode 100644 index 0000000..4c7f0d8 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-f.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:757797.4 %
Date:2026-04-16 15:29:51Functions:222491.7 %
Branches:1616100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightApprovalBase.sol +
94.6%94.6%
+
94.6 %35 / 3781.8 %9 / 11100.0 %5 / 5
RuleConditionalTransferLightBase.sol +
100.0%
+
100.0 %40 / 40100.0 %13 / 13100.0 %11 / 11
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/index-sort-l.html b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-l.html new file mode 100644 index 0000000..68c0a99 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/index-sort-l.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:757797.4 %
Date:2026-04-16 15:29:51Functions:222491.7 %
Branches:1616100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightApprovalBase.sol +
94.6%94.6%
+
94.6 %35 / 3781.8 %9 / 11100.0 %5 / 5
RuleConditionalTransferLightBase.sol +
100.0%
+
100.0 %40 / 40100.0 %13 / 13100.0 %11 / 11
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/operation/abstract/index.html b/doc/coverage/coverage/src/rules/operation/abstract/index.html new file mode 100644 index 0000000..3cdfea7 --- /dev/null +++ b/doc/coverage/coverage/src/rules/operation/abstract/index.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/operation/abstract + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/operation/abstractHitTotalCoverage
Test:lcov.infoLines:757797.4 %
Date:2026-04-16 15:29:51Functions:222491.7 %
Branches:1616100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleConditionalTransferLightApprovalBase.sol +
94.6%94.6%
+
94.6 %35 / 3781.8 %9 / 11100.0 %5 / 5
RuleConditionalTransferLightBase.sol +
100.0%
+
100.0 %40 / 40100.0 %13 / 13100.0 %11 / 11
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html b/doc/coverage/coverage/src/rules/operation/index-sort-b.html similarity index 58% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html rename to doc/coverage/coverage/src/rules/operation/index-sort-b.html index 156b486..a9a2930 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-b.html +++ b/doc/coverage/coverage/src/rules/operation/index-sort-b.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation - + LCOV - lcov.info - src/rules/operation + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - - + + + - +
Current view:top level - ../../../src/rules/operationtop level - src/rules/operation Hitlcov.info Lines:16161818 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:9966 100.0 %
Branches:22100.0 %00-
@@ -76,41 +76,41 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage - RuleConditionalTransferLightOwnable2Step.sol + RuleConditionalTransferLight.sol -
100.0%
+
100.0%
100.0 % - 5 / 5 + 9 / 9 100.0 % 3 / 3 - 0 / 0 - RuleConditionalTransferLight.sol + RuleConditionalTransferLightOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 + 9 / 9 100.0 % - 6 / 6 - 100.0 % - 2 / 2 + 3 / 3 + - + 0 / 0

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html b/doc/coverage/coverage/src/rules/operation/index-sort-f.html similarity index 58% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html rename to doc/coverage/coverage/src/rules/operation/index-sort-f.html index eae3f77..b5619fb 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-f.html +++ b/doc/coverage/coverage/src/rules/operation/index-sort-f.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation - + LCOV - lcov.info - src/rules/operation + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - - + + + - +
Current view:top level - ../../../src/rules/operationtop level - src/rules/operation Hitlcov.info Lines:16161818 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:9966 100.0 %
Branches:22100.0 %00-
@@ -76,41 +76,41 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage - RuleConditionalTransferLightOwnable2Step.sol + RuleConditionalTransferLight.sol -
100.0%
+
100.0%
100.0 % - 5 / 5 + 9 / 9 100.0 % 3 / 3 - 0 / 0 - RuleConditionalTransferLight.sol + RuleConditionalTransferLightOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 + 9 / 9 100.0 % - 6 / 6 - 100.0 % - 2 / 2 + 3 / 3 + - + 0 / 0

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-l.html b/doc/coverage/coverage/src/rules/operation/index-sort-l.html similarity index 58% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-l.html rename to doc/coverage/coverage/src/rules/operation/index-sort-l.html index ec44c2c..55cbbfe 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index-sort-l.html +++ b/doc/coverage/coverage/src/rules/operation/index-sort-l.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation - + LCOV - lcov.info - src/rules/operation + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - - + + + - +
Current view:top level - ../../../src/rules/operationtop level - src/rules/operation Hitlcov.info Lines:16161818 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:9966 100.0 %
Branches:22100.0 %00-
@@ -76,41 +76,41 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage - RuleConditionalTransferLightOwnable2Step.sol + RuleConditionalTransferLight.sol -
100.0%
+
100.0%
100.0 % - 5 / 5 + 9 / 9 100.0 % 3 / 3 - 0 / 0 - RuleConditionalTransferLight.sol + RuleConditionalTransferLightOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 + 9 / 9 100.0 % - 6 / 6 - 100.0 % - 2 / 2 + 3 / 3 + - + 0 / 0

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index.html b/doc/coverage/coverage/src/rules/operation/index.html similarity index 58% rename from doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index.html rename to doc/coverage/coverage/src/rules/operation/index.html index a2a41cf..43751bf 100644 --- a/doc/coverage/coverage/home/ryan/Pictures/dev/Rules/src/rules/operation/index.html +++ b/doc/coverage/coverage/src/rules/operation/index.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - ../../../src/rules/operation - + LCOV - lcov.info - src/rules/operation + - + - +
LCOV - code coverage report
- + @@ -31,17 +31,17 @@ - - + + - + - - + + @@ -49,16 +49,16 @@ - - - + + + - +
Current view:top level - ../../../src/rules/operationtop level - src/rules/operation Hitlcov.info Lines:16161818 100.0 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:9966 100.0 %
Branches:22100.0 %00-
@@ -76,30 +76,30 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleConditionalTransferLight.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 - 100.0 % - 6 / 6 + 9 / 9 100.0 % - 2 / 2 + 3 / 3 + - + 0 / 0 RuleConditionalTransferLightOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 5 / 5 + 9 / 9 100.0 % 3 / 3 - @@ -110,7 +110,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html similarity index 58% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html index 42a7372..b023fd5 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSet.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,78 +53,86 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSet.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSet.sol (source / functions) Hit Lines: 3434100.0 %3694.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1586.7 %
4 100.0 %
- - + + - + + + + + + + + + - + - + - + - - + + - + - + - + - + - + - + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleAddressSet.containsRuleAddressSet._authorizeAddressListAdd0
RuleAddressSet._authorizeAddressListRemove0
RuleAddressSet.contains 2
RuleAddressSet._msgDataRuleAddressSet._msgData 6
RuleAddressSet.onlyAddressListRemoveRuleAddressSet.onlyAddressListRemove 12
RuleAddressSet.removeAddressRuleAddressSet.removeAddress 12
RuleAddressSet.isAddressListed71RuleAddressSet.isAddressListed73
RuleAddressSet.areAddressesListedRuleAddressSet.areAddressesListed 108
RuleAddressSet.addAddressRuleAddressSet.addAddress 117
RuleAddressSet.removeAddressesRuleAddressSet.removeAddresses 260
RuleAddressSet.addAddressesRuleAddressSet.addAddresses 275
RuleAddressSet.onlyAddressListAddRuleAddressSet.onlyAddressListAdd 275
RuleAddressSet.listedAddressCountRuleAddressSet.listedAddressCount 536
RuleAddressSet._msgSender929RuleAddressSet._msgSender931
RuleAddressSet._contextSuffixLength937RuleAddressSet._contextSuffixLength939

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func.html similarity index 58% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func.html index 1d8147e..3d6ae02 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSet.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,78 +53,86 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSet.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSet.sol (source / functions) Hit Lines: 3434100.0 %3694.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1586.7 %
4 100.0 %
- - + + - - + + + + + + + + + + - + - - + + - + - + - + - + - - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleAddressSet._contextSuffixLength937RuleAddressSet._authorizeAddressListAdd0
RuleAddressSet._authorizeAddressListRemove0
RuleAddressSet._contextSuffixLength939
RuleAddressSet._msgDataRuleAddressSet._msgData 6
RuleAddressSet._msgSender929RuleAddressSet._msgSender931
RuleAddressSet.addAddressRuleAddressSet.addAddress 117
RuleAddressSet.addAddressesRuleAddressSet.addAddresses 275
RuleAddressSet.areAddressesListedRuleAddressSet.areAddressesListed 108
RuleAddressSet.containsRuleAddressSet.contains 2
RuleAddressSet.isAddressListed71RuleAddressSet.isAddressListed73
RuleAddressSet.listedAddressCountRuleAddressSet.listedAddressCount 536
RuleAddressSet.onlyAddressListAddRuleAddressSet.onlyAddressListAdd 275
RuleAddressSet.onlyAddressListRemoveRuleAddressSet.onlyAddressListRemove 12
RuleAddressSet.removeAddressRuleAddressSet.removeAddress 12
RuleAddressSet.removeAddressesRuleAddressSet.removeAddresses 260

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html similarity index 86% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html index dbff4e5..496a79c 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSet.sol - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSet.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSet.sol (source / functions) Hit Lines: 3434100.0 %3694.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1586.7 %
4 100.0 %
@@ -95,148 +95,144 @@ 24 : : IAddressList 25 : : { 26 : : /*////////////////////////////////////////////////////////////// - 27 : : STATE + 27 : : CONSTRUCTOR 28 : : //////////////////////////////////////////////////////////////*/ 29 : : - 30 : : /*////////////////////////////////////////////////////////////// - 31 : : CONSTRUCTOR - 32 : : //////////////////////////////////////////////////////////////*/ - 33 : : - 34 : : /** - 35 : : * @notice Initializes the RuleAddressSet contract. - 36 : : * @param forwarderIrrevocable Address of the ERC2771 forwarder (for meta-transactions). - 37 : : */ - 38 : : constructor(address forwarderIrrevocable) MetaTxModuleStandalone(forwarderIrrevocable) {} + 30 : : /** + 31 : : * @notice Initializes the RuleAddressSet contract. + 32 : : * @param forwarderIrrevocable Address of the ERC2771 forwarder (for meta-transactions). + 33 : : */ + 34 : : constructor(address forwarderIrrevocable) MetaTxModuleStandalone(forwarderIrrevocable) {} + 35 : : + 36 : : /*////////////////////////////////////////////////////////////// + 37 : : ACCESS CONTROL + 38 : : //////////////////////////////////////////////////////////////*/ 39 : : - 40 : : /*////////////////////////////////////////////////////////////// - 41 : : CORE LOGIC - 42 : : //////////////////////////////////////////////////////////////*/ - 43 : : - 44 : : /** - 45 : : * @notice Adds multiple addresses to the set. - 46 : : * @dev - 47 : : * - Does not revert if an address is already listed. - 48 : : * - Accessible only by accounts with the `ADDRESS_LIST_ADD_ROLE`. - 49 : : * @param targetAddresses Array of addresses to be added. - 50 : : */ - 51 : 275 : function addAddresses(address[] calldata targetAddresses) public onlyAddressListAdd { - 52 : 274 : _addAddresses(targetAddresses); - 53 : 274 : emit AddAddresses(targetAddresses); - 54 : : } - 55 : : - 56 : : /** - 57 : : * @notice Removes multiple addresses from the set. - 58 : : * @dev - 59 : : * - Does not revert if an address is not listed. - 60 : : * - Accessible only by accounts with the `ADDRESS_LIST_REMOVE_ROLE`. - 61 : : * @param targetAddresses Array of addresses to remove. - 62 : : */ - 63 : 260 : function removeAddresses(address[] calldata targetAddresses) public onlyAddressListRemove { - 64 : 259 : _removeAddresses(targetAddresses); - 65 : 259 : emit RemoveAddresses(targetAddresses); - 66 : : } - 67 : : - 68 : : /** - 69 : : * @notice Adds a single address to the set. - 70 : : * @dev - 71 : : * - Reverts if the address is already listed. - 72 : : * - Accessible only by accounts with the `ADDRESS_LIST_ADD_ROLE`. - 73 : : * @param targetAddress The address to be added. - 74 : : */ - 75 : 117 : function addAddress(address targetAddress) public onlyAddressListAdd { - 76 [ + + ]: 112 : require(!_isAddressListed(targetAddress), RuleAddressSet_AddressAlreadyListed()); - 77 : 111 : _addAddress(targetAddress); - 78 : 111 : emit AddAddress(targetAddress); - 79 : : } - 80 : : - 81 : : /** - 82 : : * @notice Removes a single address from the set. - 83 : : * @dev - 84 : : * - Reverts if the address is not listed. - 85 : : * - Accessible only by accounts with the `ADDRESS_LIST_REMOVE_ROLE`. - 86 : : * @param targetAddress The address to be removed. - 87 : : */ - 88 : 12 : function removeAddress(address targetAddress) public onlyAddressListRemove { - 89 [ + + ]: 7 : require(_isAddressListed(targetAddress), RuleAddressSet_AddressNotFound()); - 90 : 6 : _removeAddress(targetAddress); - 91 : 6 : emit RemoveAddress(targetAddress); - 92 : : } - 93 : : - 94 : : /*////////////////////////////////////////////////////////////// - 95 : : ACCESS CONTROL - 96 : : //////////////////////////////////////////////////////////////*/ - 97 : : - 98 : 275 : modifier onlyAddressListAdd() { - 99 : 275 : _authorizeAddressListAdd(); - 100 : : _; - 101 : : } - 102 : : - 103 : 12 : modifier onlyAddressListRemove() { - 104 : 12 : _authorizeAddressListRemove(); - 105 : : _; + 40 : 275 : modifier onlyAddressListAdd() { + 41 : 275 : _authorizeAddressListAdd(); + 42 : : _; + 43 : : } + 44 : : + 45 : 12 : modifier onlyAddressListRemove() { + 46 : 12 : _authorizeAddressListRemove(); + 47 : : _; + 48 : : } + 49 : : + 50 : 0 : function _authorizeAddressListAdd() internal view virtual; + 51 : : + 52 : 0 : function _authorizeAddressListRemove() internal view virtual; + 53 : : + 54 : : /*////////////////////////////////////////////////////////////// + 55 : : PUBLIC FUNCTIONS + 56 : : //////////////////////////////////////////////////////////////*/ + 57 : : + 58 : : /** + 59 : : * @notice Adds multiple addresses to the set. + 60 : : * @dev + 61 : : * - Does not revert if an address is already listed. + 62 : : * - Accessible only by accounts with the `ADDRESS_LIST_ADD_ROLE`. + 63 : : * @param targetAddresses Array of addresses to be added. + 64 : : */ + 65 : 275 : function addAddresses(address[] calldata targetAddresses) public onlyAddressListAdd { + 66 : 274 : _addAddresses(targetAddresses); + 67 : 274 : emit AddAddresses(targetAddresses); + 68 : : } + 69 : : + 70 : : /** + 71 : : * @notice Removes multiple addresses from the set. + 72 : : * @dev + 73 : : * - Does not revert if an address is not listed. + 74 : : * - Accessible only by accounts with the `ADDRESS_LIST_REMOVE_ROLE`. + 75 : : * @param targetAddresses Array of addresses to remove. + 76 : : */ + 77 : 260 : function removeAddresses(address[] calldata targetAddresses) public onlyAddressListRemove { + 78 : 259 : _removeAddresses(targetAddresses); + 79 : 259 : emit RemoveAddresses(targetAddresses); + 80 : : } + 81 : : + 82 : : /** + 83 : : * @notice Adds a single address to the set. + 84 : : * @dev + 85 : : * - Reverts if the address is already listed. + 86 : : * - Accessible only by accounts with the `ADDRESS_LIST_ADD_ROLE`. + 87 : : * @param targetAddress The address to be added. + 88 : : */ + 89 : 117 : function addAddress(address targetAddress) public onlyAddressListAdd { + 90 [ + + ]: 112 : require(!_isAddressListed(targetAddress), RuleAddressSet_AddressAlreadyListed()); + 91 : 111 : _addAddress(targetAddress); + 92 : 111 : emit AddAddress(targetAddress); + 93 : : } + 94 : : + 95 : : /** + 96 : : * @notice Removes a single address from the set. + 97 : : * @dev + 98 : : * - Reverts if the address is not listed. + 99 : : * - Accessible only by accounts with the `ADDRESS_LIST_REMOVE_ROLE`. + 100 : : * @param targetAddress The address to be removed. + 101 : : */ + 102 : 12 : function removeAddress(address targetAddress) public onlyAddressListRemove { + 103 [ + + ]: 7 : require(_isAddressListed(targetAddress), RuleAddressSet_AddressNotFound()); + 104 : 6 : _removeAddress(targetAddress); + 105 : 6 : emit RemoveAddress(targetAddress); 106 : : } 107 : : - 108 : : function _authorizeAddressListAdd() internal view virtual; - 109 : : - 110 : : function _authorizeAddressListRemove() internal view virtual; - 111 : : - 112 : : /** - 113 : : * @notice Returns the total number of currently listed addresses. - 114 : : * @return count The number of listed addresses. - 115 : : */ - 116 : 536 : function listedAddressCount() public view returns (uint256 count) { - 117 : 536 : count = _listedAddressCount(); - 118 : : } - 119 : : - 120 : : /** - 121 : : * @notice Checks whether a specific address is currently listed. - 122 : : * @param targetAddress The address to check. - 123 : : * @return isListed True if listed, false otherwise. - 124 : : */ - 125 : 2 : function contains(address targetAddress) public view override(IIdentityRegistryContains) returns (bool isListed) { - 126 : 2 : isListed = _isAddressListed(targetAddress); - 127 : : } - 128 : : - 129 : : /** - 130 : : * @notice Checks whether a specific address is currently listed. - 131 : : * @param targetAddress The address to check. - 132 : : * @return isListed True if listed, false otherwise. - 133 : : */ - 134 : 71 : function isAddressListed(address targetAddress) public view returns (bool isListed) { - 135 : 391 : isListed = _isAddressListed(targetAddress); - 136 : : } - 137 : : - 138 : : /** - 139 : : * @notice Checks multiple addresses in a single call. - 140 : : * @param targetAddresses Array of addresses to check. - 141 : : * @return results Array of booleans corresponding to listing status. - 142 : : */ - 143 : 108 : function areAddressesListed(address[] memory targetAddresses) public view returns (bool[] memory results) { - 144 : 108 : results = new bool[](targetAddresses.length); - 145 : 108 : for (uint256 i = 0; i < targetAddresses.length; ++i) { - 146 : 244 : results[i] = _isAddressListed(targetAddresses[i]); - 147 : : } - 148 : : } + 108 : : /** + 109 : : * @notice Returns the total number of currently listed addresses. + 110 : : * @return count The number of listed addresses. + 111 : : */ + 112 : 536 : function listedAddressCount() public view returns (uint256 count) { + 113 : 536 : count = _listedAddressCount(); + 114 : : } + 115 : : + 116 : : /** + 117 : : * @notice Checks whether a specific address is currently listed. + 118 : : * @param targetAddress The address to check. + 119 : : * @return isListed True if listed, false otherwise. + 120 : : */ + 121 : 2 : function contains(address targetAddress) public view override(IIdentityRegistryContains) returns (bool isListed) { + 122 : 2 : isListed = _isAddressListed(targetAddress); + 123 : : } + 124 : : + 125 : : /** + 126 : : * @notice Checks whether a specific address is currently listed. + 127 : : * @param targetAddress The address to check. + 128 : : * @return isListed True if listed, false otherwise. + 129 : : */ + 130 : 73 : function isAddressListed(address targetAddress) public view returns (bool isListed) { + 131 : 393 : isListed = _isAddressListed(targetAddress); + 132 : : } + 133 : : + 134 : : /** + 135 : : * @notice Checks multiple addresses in a single call. + 136 : : * @param targetAddresses Array of addresses to check. + 137 : : * @return results Array of booleans corresponding to listing status. + 138 : : */ + 139 : 108 : function areAddressesListed(address[] memory targetAddresses) public view returns (bool[] memory results) { + 140 : 108 : results = new bool[](targetAddresses.length); + 141 : 108 : for (uint256 i = 0; i < targetAddresses.length; ++i) { + 142 : 244 : results[i] = _isAddressListed(targetAddresses[i]); + 143 : : } + 144 : : } + 145 : : + 146 : : /*////////////////////////////////////////////////////////////// + 147 : : INTERNAL FUNCTIONS + 148 : : //////////////////////////////////////////////////////////////*/ 149 : : - 150 : : /*////////////////////////////////////////////////////////////// - 151 : : ERC-2771 META TX - 152 : : //////////////////////////////////////////////////////////////*/ - 153 : : - 154 : : /// @inheritdoc ERC2771Context - 155 : 929 : function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { - 156 : 929 : return ERC2771Context._msgSender(); - 157 : : } - 158 : : - 159 : : /// @inheritdoc ERC2771Context - 160 : 6 : function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { - 161 : 6 : return ERC2771Context._msgData(); - 162 : : } - 163 : : - 164 : : /// @inheritdoc ERC2771Context - 165 : 937 : function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { - 166 : 937 : return ERC2771Context._contextSuffixLength(); - 167 : : } - 168 : : } + 150 : : /// @inheritdoc ERC2771Context + 151 : 931 : function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { + 152 : 931 : return ERC2771Context._msgSender(); + 153 : : } + 154 : : + 155 : : /// @inheritdoc ERC2771Context + 156 : 6 : function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { + 157 : 6 : return ERC2771Context._msgData(); + 158 : : } + 159 : : + 160 : : /// @inheritdoc ERC2771Context + 161 : 939 : function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { + 162 : 939 : return ERC2771Context._contextSuffixLength(); + 163 : : } + 164 : : } @@ -244,7 +240,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html similarity index 72% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html index 01dc2e5..05dd139 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSetInternal.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,20 +53,20 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 64 100.0 %
- - + + @@ -74,7 +74,7 @@ - + @@ -90,13 +90,13 @@ - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleAddressSetInternal._removeAddress
RuleAddressSetInternal._addAddress111113
RuleAddressSetInternal._removeAddresses
RuleAddressSetInternal._isAddressListed771773

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html similarity index 72% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html index b7986b8..e95d122 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSetInternal.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,24 +53,24 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 64 100.0 %
- - + + - + @@ -78,7 +78,7 @@ - + @@ -96,7 +96,7 @@

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleAddressSetInternal._addAddress111113
RuleAddressSetInternal._addAddresses
RuleAddressSetInternal._isAddressListed771773
RuleAddressSetInternal._listedAddressCount
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html similarity index 91% rename from doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html index 463505a..520fea8 100644 --- a/doc/coverage/coverage/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleAddressSet/RuleAddressSetInternal.sol - + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions)top level - src/rules/validation/abstract/RuleAddressSet - RuleAddressSetInternal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 64 100.0 %
@@ -73,7 +73,7 @@ 2 : : pragma solidity ^0.8.20; 3 : : 4 : : /* ==== OpenZeppelin === */ - 5 : : import {EnumerableSet} from "OZ/utils/structs/EnumerableSet.sol"; + 5 : : import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; 6 : : 7 : : /** 8 : : * @title Rule Address Set (Internal) @@ -94,7 +94,7 @@ 23 : : EnumerableSet.AddressSet private _listedAddresses; 24 : : 25 : : /*////////////////////////////////////////////////////////////// - 26 : : INTERNAL + 26 : : INTERNAL FUNCTIONS 27 : : //////////////////////////////////////////////////////////////*/ 28 : : 29 : : /** @@ -142,8 +142,8 @@ 71 : : * @notice Adds a single address to the set. 72 : : * @param targetAddress The address to add. 73 : : */ - 74 : 111 : function _addAddress(address targetAddress) internal virtual { - 75 : 111 : _listedAddresses.add(targetAddress); + 74 : 113 : function _addAddress(address targetAddress) internal virtual { + 75 : 113 : _listedAddresses.add(targetAddress); 76 : : } 77 : : 78 : : /** @@ -167,8 +167,8 @@ 96 : : * @param targetAddress The address to check. 97 : : * @return isListed True if the address is listed, false otherwise. 98 : : */ - 99 : 771 : function _isAddressListed(address targetAddress) internal view virtual returns (bool isListed) { - 100 : 771 : isListed = _listedAddresses.contains(targetAddress); + 99 : 773 : function _isAddressListed(address targetAddress) internal view virtual returns (bool isListed) { + 100 : 773 : isListed = _listedAddresses.contains(targetAddress); 101 : : } 102 : : } @@ -178,7 +178,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-b.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-b.html new file mode 100644 index 0000000..b7b5003 --- /dev/null +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-b.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/validation/abstract/RuleAddressSetHitTotalCoverage
Test:lcov.infoLines:525496.3 %
Date:2026-04-16 15:29:51Functions:192190.5 %
Branches:88100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleAddressSet.sol +
94.4%94.4%
+
94.4 %34 / 3686.7 %13 / 15100.0 %4 / 4
RuleAddressSetInternal.sol +
100.0%
+
100.0 %18 / 18100.0 %6 / 6100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-f.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-f.html new file mode 100644 index 0000000..0ec1d22 --- /dev/null +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-f.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/validation/abstract/RuleAddressSetHitTotalCoverage
Test:lcov.infoLines:525496.3 %
Date:2026-04-16 15:29:51Functions:192190.5 %
Branches:88100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleAddressSet.sol +
94.4%94.4%
+
94.4 %34 / 3686.7 %13 / 15100.0 %4 / 4
RuleAddressSetInternal.sol +
100.0%
+
100.0 %18 / 18100.0 %6 / 6100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-l.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-l.html new file mode 100644 index 0000000..254ba12 --- /dev/null +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index-sort-l.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/validation/abstract/RuleAddressSetHitTotalCoverage
Test:lcov.infoLines:525496.3 %
Date:2026-04-16 15:29:51Functions:192190.5 %
Branches:88100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleAddressSet.sol +
94.4%94.4%
+
94.4 %34 / 3686.7 %13 / 15100.0 %4 / 4
RuleAddressSetInternal.sol +
100.0%
+
100.0 %18 / 18100.0 %6 / 6100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index.html new file mode 100644 index 0000000..2abdb78 --- /dev/null +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleAddressSet/index.html @@ -0,0 +1,119 @@ + + + + + + + LCOV - lcov.info - src/rules/validation/abstract/RuleAddressSet + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/rules/validation/abstract/RuleAddressSetHitTotalCoverage
Test:lcov.infoLines:525496.3 %
Date:2026-04-16 15:29:51Functions:192190.5 %
Branches:88100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverageBranches Sort by branch coverage
RuleAddressSet.sol +
94.4%94.4%
+
94.4 %34 / 3686.7 %13 / 15100.0 %4 / 4
RuleAddressSetInternal.sol +
100.0%
+
100.0 %18 / 18100.0 %6 / 6100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.16
+
+ + + diff --git a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html similarity index 77% rename from doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html index 51af6ae..47d2037 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980/RuleERC2980Internal.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,20 +53,20 @@ - +
Current view:top level - abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions)top level - src/rules/validation/abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
- - + + @@ -106,21 +106,21 @@ - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Internal._removeFrozenlistAddresses
RuleERC2980Internal._addWhitelistAddress3943
RuleERC2980Internal._isWhitelisted8289
RuleERC2980Internal._isFrozen9094

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html similarity index 77% rename from doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html index eb4b210..64acba5 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980/RuleERC2980Internal.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,20 +53,20 @@ - +
Current view:top level - abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions)top level - src/rules/validation/abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
- - + + @@ -78,7 +78,7 @@ - + @@ -90,11 +90,11 @@ - + - + @@ -120,7 +120,7 @@

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Internal._addFrozenlistAddress
RuleERC2980Internal._addWhitelistAddress3943
RuleERC2980Internal._addWhitelistAddresses
RuleERC2980Internal._isFrozen9094
RuleERC2980Internal._isWhitelisted8289
RuleERC2980Internal._removeFrozenlistAddress
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html similarity index 92% rename from doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html index 753927f..fae617a 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980/RuleERC2980Internal.sol - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions)top level - src/rules/validation/abstract/RuleERC2980 - RuleERC2980Internal.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
@@ -73,7 +73,7 @@ 2 : : pragma solidity ^0.8.20; 3 : : 4 : : /* ==== OpenZeppelin === */ - 5 : : import {EnumerableSet} from "OZ/utils/structs/EnumerableSet.sol"; + 5 : : import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; 6 : : 7 : : /** 8 : : * @title RuleERC2980Internal @@ -127,16 +127,16 @@ 56 : : } 57 : : } 58 : : - 59 : 39 : function _addWhitelistAddress(address targetAddress) internal virtual { - 60 : 39 : _whitelist.add(targetAddress); + 59 : 43 : function _addWhitelistAddress(address targetAddress) internal virtual { + 60 : 43 : _whitelist.add(targetAddress); 61 : : } 62 : : 63 : 4 : function _removeWhitelistAddress(address targetAddress) internal virtual { 64 : 4 : _whitelist.remove(targetAddress); 65 : : } 66 : : - 67 : 82 : function _isWhitelisted(address targetAddress) internal view virtual returns (bool) { - 68 : 82 : return _whitelist.contains(targetAddress); + 67 : 89 : function _isWhitelisted(address targetAddress) internal view virtual returns (bool) { + 68 : 89 : return _whitelist.contains(targetAddress); 69 : : } 70 : : 71 : 5 : function _whitelistCount() internal view virtual returns (uint256) { @@ -181,8 +181,8 @@ 110 : 4 : _frozenlist.remove(targetAddress); 111 : : } 112 : : - 113 : 90 : function _isFrozen(address targetAddress) internal view virtual returns (bool) { - 114 : 90 : return _frozenlist.contains(targetAddress); + 113 : 94 : function _isFrozen(address targetAddress) internal view virtual returns (bool) { + 114 : 94 : return _frozenlist.contains(targetAddress); 115 : : } 116 : : 117 : 4 : function _frozenlistCount() internal view virtual returns (uint256) { @@ -196,7 +196,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-b.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-b.html similarity index 67% rename from doc/coverage/coverage/abstract/RuleERC2980/index-sort-b.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-b.html index 3a5069c..443cd34 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-b.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-b.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980 - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980 + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleERC2980top level - src/rules/validation/abstract/RuleERC2980 Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleERC2980Internal.sol -
100.0%
+
100.0%
100.0 % 36 / 36 @@ -98,7 +98,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-f.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-f.html similarity index 67% rename from doc/coverage/coverage/abstract/RuleERC2980/index-sort-f.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-f.html index cc487f0..8da3e22 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-f.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-f.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980 - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980 + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleERC2980top level - src/rules/validation/abstract/RuleERC2980 Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleERC2980Internal.sol -
100.0%
+
100.0%
100.0 % 36 / 36 @@ -98,7 +98,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-l.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-l.html similarity index 67% rename from doc/coverage/coverage/abstract/RuleERC2980/index-sort-l.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-l.html index fa2906b..fcb03d9 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/index-sort-l.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index-sort-l.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980 - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980 + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleERC2980top level - src/rules/validation/abstract/RuleERC2980 Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleERC2980Internal.sol -
100.0%
+
100.0%
100.0 % 36 / 36 @@ -98,7 +98,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/RuleERC2980/index.html b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index.html similarity index 67% rename from doc/coverage/coverage/abstract/RuleERC2980/index.html rename to doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index.html index b9213df..26b1739 100644 --- a/doc/coverage/coverage/abstract/RuleERC2980/index.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/RuleERC2980/index.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/RuleERC2980 - + LCOV - lcov.info - src/rules/validation/abstract/RuleERC2980 + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/RuleERC2980top level - src/rules/validation/abstract/RuleERC2980 Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 128 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleERC2980Internal.sol -
100.0%
+
100.0%
100.0 % 36 / 36 @@ -98,7 +98,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func-sort-c.html index dbf2453..3623044 100644 --- a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleBlacklistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleBlacklistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,62 +53,62 @@ - +
Current view:top level - abstract/base - RuleBlacklistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleBlacklistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 914 100.0 %
- - + + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklistBase.transferred.1RuleBlacklistBase.transferred.1 2
RuleBlacklistBase._transferredFromRuleBlacklistBase._transferredFrom 4
RuleBlacklistBase.canReturnTransferRestrictionCodeRuleBlacklistBase.canReturnTransferRestrictionCode 4
RuleBlacklistBase.messageForTransferRestrictionRuleBlacklistBase.messageForTransferRestriction 12
RuleBlacklistBase._detectTransferRestrictionFromRuleBlacklistBase._detectTransferRestrictionFrom 22
RuleBlacklistBase.transferred.0RuleBlacklistBase.transferred.0 58
RuleBlacklistBase._transferredRuleBlacklistBase._transferred 61
RuleBlacklistBase.supportsInterfaceRuleBlacklistBase.supportsInterface 61
RuleBlacklistBase._detectTransferRestrictionRuleBlacklistBase._detectTransferRestriction 106

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func.html similarity index 67% rename from doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func.html index bae16a3..dddeb1b 100644 --- a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleBlacklistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleBlacklistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,62 +53,62 @@ - +
Current view:top level - abstract/base - RuleBlacklistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleBlacklistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 914 100.0 %
- - + + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklistBase._detectTransferRestrictionRuleBlacklistBase._detectTransferRestriction 106
RuleBlacklistBase._detectTransferRestrictionFromRuleBlacklistBase._detectTransferRestrictionFrom 22
RuleBlacklistBase._transferredRuleBlacklistBase._transferred 61
RuleBlacklistBase._transferredFromRuleBlacklistBase._transferredFrom 4
RuleBlacklistBase.canReturnTransferRestrictionCodeRuleBlacklistBase.canReturnTransferRestrictionCode 4
RuleBlacklistBase.messageForTransferRestrictionRuleBlacklistBase.messageForTransferRestriction 12
RuleBlacklistBase.supportsInterfaceRuleBlacklistBase.supportsInterface 61
RuleBlacklistBase.transferred.0RuleBlacklistBase.transferred.0 58
RuleBlacklistBase.transferred.1RuleBlacklistBase.transferred.1 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.gcov.html similarity index 76% rename from doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.gcov.html index 1bc30a8..9df608c 100644 --- a/doc/coverage/coverage/abstract/base/RuleBlacklistBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleBlacklistBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleBlacklistBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleBlacklistBase.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleBlacklistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleBlacklistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 914 100.0 %
@@ -86,113 +86,125 @@ 15 : : * @notice Core blacklist logic without access-control policy. 16 : : */ 17 : : abstract contract RuleBlacklistBase is RuleAddressSet, RuleNFTAdapter, RuleBlacklistInvariantStorage { - 18 : : constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} - 19 : : - 20 : 106 : function _detectTransferRestriction( - 21 : : address from, - 22 : : address to, - 23 : : uint256 /* value */ - 24 : : ) - 25 : : internal - 26 : : view - 27 : : override - 28 : : returns (uint8) - 29 : : { - 30 [ + + ]: 106 : if (isAddressListed(from)) { - 31 : 23 : return CODE_ADDRESS_FROM_IS_BLACKLISTED; - 32 [ + ]: 83 : } else if (isAddressListed(to)) { - 33 : 19 : return CODE_ADDRESS_TO_IS_BLACKLISTED; - 34 : : } - 35 : 64 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 36 : : } - 37 : : - 38 : 22 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 39 : : internal - 40 : : view - 41 : : override - 42 : : returns (uint8) - 43 : : { - 44 [ + ]: 22 : if (isAddressListed(spender)) { - 45 : 8 : return CODE_ADDRESS_SPENDER_IS_BLACKLISTED; - 46 : : } - 47 : 14 : return _detectTransferRestriction(from, to, value); - 48 : : } - 49 : : - 50 : 4 : function canReturnTransferRestrictionCode(uint8 restrictionCode) - 51 : : public - 52 : : pure - 53 : : virtual - 54 : : override(IRule) - 55 : : returns (bool) - 56 : : { - 57 : 4 : return restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED || restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED - 58 : 1 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED; - 59 : : } - 60 : : - 61 : 12 : function messageForTransferRestriction(uint8 restrictionCode) - 62 : : public - 63 : : pure - 64 : : virtual - 65 : : override(IERC1404) - 66 : : returns (string memory) - 67 : : { - 68 [ + + ]: 12 : if (restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED) { - 69 : 5 : return TEXT_ADDRESS_FROM_IS_BLACKLISTED; - 70 [ + + ]: 7 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED) { - 71 : 3 : return TEXT_ADDRESS_TO_IS_BLACKLISTED; - 72 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED) { - 73 : 1 : return TEXT_ADDRESS_SPENDER_IS_BLACKLISTED; - 74 : : } else { - 75 : 3 : return TEXT_CODE_NOT_FOUND; - 76 : : } - 77 : : } - 78 : : - 79 : 61 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { - 80 : 61 : return RuleTransferValidation.supportsInterface(interfaceId); + 18 : : /*////////////////////////////////////////////////////////////// + 19 : : CONSTRUCTOR + 20 : : //////////////////////////////////////////////////////////////*/ + 21 : : + 22 : : constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} + 23 : : + 24 : : /*////////////////////////////////////////////////////////////// + 25 : : PUBLIC FUNCTIONS + 26 : : //////////////////////////////////////////////////////////////*/ + 27 : : + 28 : : /** + 29 : : * @inheritdoc IERC3643IComplianceContract + 30 : : * @dev Validation only; does not modify state. + 31 : : */ + 32 : 58 : function transferred(address from, address to, uint256 value) + 33 : : public + 34 : : view + 35 : : virtual + 36 : : override(IERC3643IComplianceContract) + 37 : : { + 38 : 58 : _transferred(from, to, value); + 39 : : } + 40 : : + 41 : : /** + 42 : : * @inheritdoc IRuleEngine + 43 : : * @dev Validation only; does not modify state. + 44 : : */ + 45 : 2 : function transferred(address spender, address from, address to, uint256 value) + 46 : : public + 47 : : view + 48 : : virtual + 49 : : override(IRuleEngine) + 50 : : { + 51 : 2 : _transferredFrom(spender, from, to, value); + 52 : : } + 53 : : + 54 : 4 : function canReturnTransferRestrictionCode(uint8 restrictionCode) + 55 : : public + 56 : : pure + 57 : : virtual + 58 : : override(IRule) + 59 : : returns (bool) + 60 : : { + 61 : 4 : return restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED || restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED + 62 : 1 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED; + 63 : : } + 64 : : + 65 : 12 : function messageForTransferRestriction(uint8 restrictionCode) + 66 : : public + 67 : : pure + 68 : : virtual + 69 : : override(IERC1404) + 70 : : returns (string memory) + 71 : : { + 72 [ + + ]: 12 : if (restrictionCode == CODE_ADDRESS_FROM_IS_BLACKLISTED) { + 73 : 5 : return TEXT_ADDRESS_FROM_IS_BLACKLISTED; + 74 [ + + ]: 7 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_BLACKLISTED) { + 75 : 3 : return TEXT_ADDRESS_TO_IS_BLACKLISTED; + 76 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_BLACKLISTED) { + 77 : 1 : return TEXT_ADDRESS_SPENDER_IS_BLACKLISTED; + 78 : : } else { + 79 : 3 : return TEXT_CODE_NOT_FOUND; + 80 : : } 81 : : } 82 : : - 83 : : /** - 84 : : * @inheritdoc IERC3643IComplianceContract - 85 : : * @dev Validation only; does not modify state. - 86 : : */ - 87 : 58 : function transferred(address from, address to, uint256 value) - 88 : : public - 89 : : view - 90 : : virtual - 91 : : override(IERC3643IComplianceContract) - 92 : : { - 93 : 58 : _transferred(from, to, value); - 94 : : } - 95 : : - 96 : : /** - 97 : : * @inheritdoc IRuleEngine - 98 : : * @dev Validation only; does not modify state. - 99 : : */ - 100 : 2 : function transferred(address spender, address from, address to, uint256 value) - 101 : : public - 102 : : view - 103 : : virtual - 104 : : override(IRuleEngine) - 105 : : { - 106 : 2 : _transferredFrom(spender, from, to, value); + 83 : 61 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { + 84 : 61 : return RuleTransferValidation.supportsInterface(interfaceId); + 85 : : } + 86 : : + 87 : : /*////////////////////////////////////////////////////////////// + 88 : : INTERNAL FUNCTIONS + 89 : : //////////////////////////////////////////////////////////////*/ + 90 : : + 91 : 106 : function _detectTransferRestriction( + 92 : : address from, + 93 : : address to, + 94 : : uint256 /* value */ + 95 : : ) + 96 : : internal + 97 : : view + 98 : : override + 99 : : returns (uint8) + 100 : : { + 101 [ + + ]: 106 : if (isAddressListed(from)) { + 102 : 23 : return CODE_ADDRESS_FROM_IS_BLACKLISTED; + 103 [ + ]: 83 : } else if (isAddressListed(to)) { + 104 : 19 : return CODE_ADDRESS_TO_IS_BLACKLISTED; + 105 : : } + 106 : 64 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); 107 : : } 108 : : - 109 : 61 : function _transferred(address from, address to, uint256 value) internal view virtual override { - 110 : 61 : uint8 code = _detectTransferRestriction(from, to, value); - 111 [ + + ]: 61 : require( - 112 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), - 113 : : RuleBlacklist_InvalidTransfer(address(this), from, to, value, code) - 114 : : ); - 115 : : } - 116 : : - 117 : 4 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 118 : 4 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 119 [ + + ]: 4 : require( - 120 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), - 121 : : RuleBlacklist_InvalidTransferFrom(address(this), spender, from, to, value, code) - 122 : : ); - 123 : : } - 124 : : } + 109 : 22 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 110 : : internal + 111 : : view + 112 : : override + 113 : : returns (uint8) + 114 : : { + 115 [ + ]: 22 : if (isAddressListed(spender)) { + 116 : 8 : return CODE_ADDRESS_SPENDER_IS_BLACKLISTED; + 117 : : } + 118 : 14 : return _detectTransferRestriction(from, to, value); + 119 : : } + 120 : : + 121 : 61 : function _transferred(address from, address to, uint256 value) internal view virtual override { + 122 : 61 : uint8 code = _detectTransferRestriction(from, to, value); + 123 [ + + ]: 61 : require( + 124 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), + 125 : : RuleBlacklist_InvalidTransfer(address(this), from, to, value, code) + 126 : : ); + 127 : : } + 128 : : + 129 : 4 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 130 : 4 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 131 [ + + ]: 4 : require( + 132 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), + 133 : : RuleBlacklist_InvalidTransferFrom(address(this), spender, from, to, value, code) + 134 : : ); + 135 : : } + 136 : : } @@ -200,7 +212,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func-sort-c.html similarity index 56% rename from doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func-sort-c.html index 8da2363..bd5584f 100644 --- a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleERC2980Base.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleERC2980Base.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,180 +31,200 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/base - RuleERC2980Base.sol (source / functions)top level - src/rules/validation/abstract/base - RuleERC2980Base.sol (source / functions) Hitlcov.info Lines:101101100.0 %10510996.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:3333100.0 %343889.5 %
Branches:25252626 100.0 %
- - + + - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - - + + - + - - + + + + + + - - + + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Base.areFrozenRuleERC2980Base._authorizeFrozenlistAdd0
RuleERC2980Base._authorizeFrozenlistRemove0
RuleERC2980Base._authorizeWhitelistAdd0
RuleERC2980Base._authorizeWhitelistRemove0
RuleERC2980Base.areFrozen 1
RuleERC2980Base.areWhitelistedRuleERC2980Base.areWhitelisted 1
RuleERC2980Base.supportsInterfaceRuleERC2980Base.supportsInterface 1
RuleERC2980Base._msgDataRuleERC2980Base._msgData 2
RuleERC2980Base.onlyFrozenlistRemoveRuleERC2980Base.onlyFrozenlistRemove 2
RuleERC2980Base.removeFrozenlistAddressesRuleERC2980Base.removeFrozenlistAddresses 2
RuleERC2980Base.transferred.1RuleERC2980Base.transferred.1 2
RuleERC2980Base._transferredFromRuleERC2980Base._transferredFrom 3
RuleERC2980Base.isVerifiedRuleERC2980Base.isVerified 3
RuleERC2980Base.frozenlistRuleERC2980Base.frozenlist 4
RuleERC2980Base.frozenlistAddressCountRuleERC2980Base.frozenlistAddressCount 4
RuleERC2980Base.removeWhitelistAddressesRuleERC2980Base.removeWhitelistAddresses 4
RuleERC2980Base.transferred.0RuleERC2980Base.transferred.0 4
RuleERC2980Base._transferredRuleERC2980Base._transferred 5
RuleERC2980Base.canReturnTransferRestrictionCodeRuleERC2980Base.canReturnTransferRestrictionCode 5
RuleERC2980Base.messageForTransferRestrictionRuleERC2980Base.messageForTransferRestriction 5
RuleERC2980Base.whitelistRuleERC2980Base.whitelistAddressCount 5
RuleERC2980Base.whitelistAddressCount5RuleERC2980Base.addFrozenlistAddresses6
RuleERC2980Base.addFrozenlistAddressesRuleERC2980Base.addWhitelistAddresses 6
RuleERC2980Base.addWhitelistAddressesRuleERC2980Base.onlyFrozenlistAdd 6
RuleERC2980Base.onlyFrozenlistAddRuleERC2980Base.onlyWhitelistAdd 6
RuleERC2980Base.onlyWhitelistAdd6RuleERC2980Base.onlyWhitelistRemove7
RuleERC2980Base.onlyWhitelistRemoveRuleERC2980Base.removeFrozenlistAddress 7
RuleERC2980Base.removeFrozenlistAddressRuleERC2980Base.removeWhitelistAddress 7
RuleERC2980Base.removeWhitelistAddressRuleERC2980Base.whitelist 7
RuleERC2980Base._detectTransferRestrictionFromRuleERC2980Base._detectTransferRestrictionFrom 8
RuleERC2980Base.isFrozenRuleERC2980Base.isFrozen 12
RuleERC2980Base.isWhitelisted13RuleERC2980Base.isWhitelisted14
RuleERC2980Base._detectTransferRestrictionRuleERC2980Base.addFrozenlistAddress 22
RuleERC2980Base.addFrozenlistAddress22RuleERC2980Base._detectTransferRestriction24
RuleERC2980Base.addWhitelistAddress45
RuleERC2980Base.addWhitelistAddress43RuleERC2980Base.constructor67
RuleERC2980Base._msgSender267RuleERC2980Base._msgSender272
RuleERC2980Base._contextSuffixLength269RuleERC2980Base._contextSuffixLength274

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func.html similarity index 56% rename from doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func.html index 0d085a0..6c2afc9 100644 --- a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleERC2980Base.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleERC2980Base.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,180 +31,200 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/base - RuleERC2980Base.sol (source / functions)top level - src/rules/validation/abstract/base - RuleERC2980Base.sol (source / functions) Hitlcov.info Lines:101101100.0 %10510996.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:3333100.0 %343889.5 %
Branches:25252626 100.0 %
- - + + - - + + - - + + + + + + + + + + - + + + + + + + + + - + - - + + - + - + - + - + - - + + - + - + - + - + - + + + + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Base._contextSuffixLength269RuleERC2980Base._authorizeFrozenlistAdd0
RuleERC2980Base._detectTransferRestriction22RuleERC2980Base._authorizeFrozenlistRemove0
RuleERC2980Base._authorizeWhitelistAdd0
RuleERC2980Base._authorizeWhitelistRemove0
RuleERC2980Base._detectTransferRestrictionFromRuleERC2980Base._contextSuffixLength274
RuleERC2980Base._detectTransferRestriction24
RuleERC2980Base._detectTransferRestrictionFrom 8
RuleERC2980Base._msgDataRuleERC2980Base._msgData 2
RuleERC2980Base._msgSender267RuleERC2980Base._msgSender272
RuleERC2980Base._transferredRuleERC2980Base._transferred 5
RuleERC2980Base._transferredFromRuleERC2980Base._transferredFrom 3
RuleERC2980Base.addFrozenlistAddressRuleERC2980Base.addFrozenlistAddress 22
RuleERC2980Base.addFrozenlistAddressesRuleERC2980Base.addFrozenlistAddresses 6
RuleERC2980Base.addWhitelistAddress43RuleERC2980Base.addWhitelistAddress45
RuleERC2980Base.addWhitelistAddressesRuleERC2980Base.addWhitelistAddresses 6
RuleERC2980Base.areFrozenRuleERC2980Base.areFrozen 1
RuleERC2980Base.areWhitelistedRuleERC2980Base.areWhitelisted 1
RuleERC2980Base.canReturnTransferRestrictionCodeRuleERC2980Base.canReturnTransferRestrictionCode 5
RuleERC2980Base.frozenlistRuleERC2980Base.constructor67
RuleERC2980Base.frozenlist 4
RuleERC2980Base.frozenlistAddressCountRuleERC2980Base.frozenlistAddressCount 4
RuleERC2980Base.isFrozenRuleERC2980Base.isFrozen 12
RuleERC2980Base.isVerifiedRuleERC2980Base.isVerified 3
RuleERC2980Base.isWhitelisted13RuleERC2980Base.isWhitelisted14
RuleERC2980Base.messageForTransferRestrictionRuleERC2980Base.messageForTransferRestriction 5
RuleERC2980Base.onlyFrozenlistAddRuleERC2980Base.onlyFrozenlistAdd 6
RuleERC2980Base.onlyFrozenlistRemoveRuleERC2980Base.onlyFrozenlistRemove 2
RuleERC2980Base.onlyWhitelistAddRuleERC2980Base.onlyWhitelistAdd 6
RuleERC2980Base.onlyWhitelistRemoveRuleERC2980Base.onlyWhitelistRemove 7
RuleERC2980Base.removeFrozenlistAddressRuleERC2980Base.removeFrozenlistAddress 7
RuleERC2980Base.removeFrozenlistAddressesRuleERC2980Base.removeFrozenlistAddresses 2
RuleERC2980Base.removeWhitelistAddressRuleERC2980Base.removeWhitelistAddress 7
RuleERC2980Base.removeWhitelistAddressesRuleERC2980Base.removeWhitelistAddresses 4
RuleERC2980Base.supportsInterfaceRuleERC2980Base.supportsInterface 1
RuleERC2980Base.transferred.0RuleERC2980Base.transferred.0 4
RuleERC2980Base.transferred.1RuleERC2980Base.transferred.1 2
RuleERC2980Base.whitelist5RuleERC2980Base.whitelist7
RuleERC2980Base.whitelistAddressCountRuleERC2980Base.whitelistAddressCount 5

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.gcov.html similarity index 80% rename from doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.gcov.html index 62c8d68..be5ba36 100644 --- a/doc/coverage/coverage/abstract/base/RuleERC2980Base.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleERC2980Base.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleERC2980Base.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleERC2980Base.sol + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/base - RuleERC2980Base.sol (source / functions)top level - src/rules/validation/abstract/base - RuleERC2980Base.sol (source / functions) Hitlcov.info Lines:101101100.0 %10510996.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:3333100.0 %343889.5 %
Branches:25252626 100.0 %
@@ -109,346 +109,339 @@ 38 : : CONSTRUCTOR 39 : : //////////////////////////////////////////////////////////////*/ 40 : : - 41 : : constructor(address forwarderIrrevocable) MetaTxModuleStandalone(forwarderIrrevocable) {} - 42 : : - 43 : : /*////////////////////////////////////////////////////////////// - 44 : : TRANSFER RESTRICTION LOGIC - 45 : : //////////////////////////////////////////////////////////////*/ - 46 : : - 47 : 22 : function _detectTransferRestriction( - 48 : : address from, - 49 : : address to, - 50 : : uint256 /* value */ - 51 : : ) - 52 : : internal - 53 : : view - 54 : : virtual - 55 : : override - 56 : : returns (uint8) - 57 : : { - 58 : : // Frozenlist check has priority - 59 [ + + ]: 22 : if (_isFrozen(from)) { - 60 : 4 : return CODE_ADDRESS_FROM_IS_FROZEN; - 61 [ + ]: 18 : } else if (_isFrozen(to)) { - 62 : 4 : return CODE_ADDRESS_TO_IS_FROZEN; - 63 : : } - 64 : : // Whitelist check: only the recipient must be whitelisted - 65 [ + ]: 14 : if (!_isWhitelisted(to)) { - 66 : 4 : return CODE_ADDRESS_TO_NOT_WHITELISTED; - 67 : : } - 68 : 10 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 69 : : } - 70 : : - 71 : 8 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 72 : : internal - 73 : : view - 74 : : virtual - 75 : : override - 76 : : returns (uint8) - 77 : : { - 78 [ + ]: 8 : if (_isFrozen(spender)) { - 79 : 4 : return CODE_ADDRESS_SPENDER_IS_FROZEN; - 80 : : } - 81 : 4 : return _detectTransferRestriction(from, to, value); - 82 : : } - 83 : : - 84 : : /*////////////////////////////////////////////////////////////// - 85 : : ERC-3643 / IRuleEngine HOOKS - 86 : : //////////////////////////////////////////////////////////////*/ - 87 : : - 88 : 4 : function transferred(address from, address to, uint256 value) - 89 : : public - 90 : : view - 91 : : virtual - 92 : : override(IERC3643IComplianceContract) - 93 : : { - 94 : 4 : _transferred(from, to, value); - 95 : : } - 96 : : - 97 : 2 : function transferred(address spender, address from, address to, uint256 value) - 98 : : public - 99 : : view - 100 : : virtual - 101 : : override(IRuleEngine) - 102 : : { - 103 : 2 : _transferredFrom(spender, from, to, value); - 104 : : } - 105 : : - 106 : 5 : function _transferred(address from, address to, uint256 value) internal view virtual override { - 107 : 5 : uint8 code = _detectTransferRestriction(from, to, value); - 108 [ + + ]: 5 : require( - 109 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 110 : : RuleERC2980_InvalidTransfer(address(this), from, to, value, code) - 111 : : ); - 112 : : } - 113 : : - 114 : 3 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 115 : 3 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 116 [ + + ]: 3 : require( - 117 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 118 : : RuleERC2980_InvalidTransferFrom(address(this), spender, from, to, value, code) - 119 : : ); - 120 : : } - 121 : : - 122 : : /*////////////////////////////////////////////////////////////// - 123 : : RESTRICTION CODE HELPERS - 124 : : //////////////////////////////////////////////////////////////*/ - 125 : : - 126 : 5 : function canReturnTransferRestrictionCode(uint8 restrictionCode) - 127 : : public - 128 : : pure - 129 : : virtual - 130 : : override(IRule) - 131 : : returns (bool) - 132 : : { - 133 : 5 : return restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_IS_FROZEN - 134 : 3 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED; - 135 : : } - 136 : : - 137 : 5 : function messageForTransferRestriction(uint8 restrictionCode) - 138 : : public - 139 : : pure - 140 : : virtual - 141 : : override(IERC1404) - 142 : : returns (string memory) - 143 : : { - 144 [ + + ]: 5 : if (restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN) { - 145 : 1 : return TEXT_ADDRESS_FROM_IS_FROZEN; - 146 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_FROZEN) { - 147 : 1 : return TEXT_ADDRESS_TO_IS_FROZEN; - 148 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN) { - 149 : 1 : return TEXT_ADDRESS_SPENDER_IS_FROZEN; - 150 [ + + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { - 151 : 1 : return TEXT_ADDRESS_TO_NOT_WHITELISTED; - 152 : : } else { - 153 : 1 : return TEXT_CODE_NOT_FOUND; - 154 : : } - 155 : : } - 156 : : - 157 : : /*////////////////////////////////////////////////////////////// - 158 : : WHITELIST MANAGEMENT - 159 : : //////////////////////////////////////////////////////////////*/ - 160 : : - 161 : : /** - 162 : : * @notice Adds multiple addresses to the whitelist. - 163 : : * @dev Does not revert if an address is already listed. - 164 : : */ - 165 : 6 : function addWhitelistAddresses(address[] calldata targetAddresses) public onlyWhitelistAdd { - 166 : 4 : _addWhitelistAddresses(targetAddresses); - 167 : 4 : emit AddWhitelistAddresses(targetAddresses); - 168 : : } - 169 : : - 170 : : /** - 171 : : * @notice Removes multiple addresses from the whitelist. - 172 : : * @dev Does not revert if an address is not listed. - 173 : : */ - 174 : 4 : function removeWhitelistAddresses(address[] calldata targetAddresses) public onlyWhitelistRemove { - 175 : 3 : _removeWhitelistAddresses(targetAddresses); - 176 : 3 : emit RemoveWhitelistAddresses(targetAddresses); - 177 : : } - 178 : : - 179 : : /** - 180 : : * @notice Adds a single address to the whitelist. - 181 : : * @dev - 182 : : * Reverts if the address is already listed. - 183 : : * Deviation from ERC-2980 `Whitelistable` example interface: the spec's `addAddressToWhitelist` - 184 : : * returns `false` on duplicates instead of reverting. This implementation follows the codebase - 185 : : * convention of reverting on invalid single-item operations. - 186 : : */ - 187 : 43 : function addWhitelistAddress(address targetAddress) public onlyWhitelistAdd { - 188 [ + + ]: 40 : require(!_isWhitelisted(targetAddress), RuleERC2980_AddressAlreadyListed()); - 189 : 39 : _addWhitelistAddress(targetAddress); - 190 : 39 : emit AddWhitelistAddress(targetAddress); - 191 : : } - 192 : : - 193 : : /** - 194 : : * @notice Removes a single address from the whitelist. - 195 : : * @dev - 196 : : * Reverts if the address is not listed. - 197 : : * Deviation from ERC-2980 `Whitelistable` example interface: the spec's `removeAddressFromWhitelist` - 198 : : * returns `false` when not found instead of reverting. This implementation follows the codebase - 199 : : * convention of reverting on invalid single-item operations. - 200 : : */ - 201 : 7 : function removeWhitelistAddress(address targetAddress) public onlyWhitelistRemove { - 202 [ + + ]: 5 : require(_isWhitelisted(targetAddress), RuleERC2980_AddressNotFound()); - 203 : 4 : _removeWhitelistAddress(targetAddress); - 204 : 4 : emit RemoveWhitelistAddress(targetAddress); - 205 : : } - 206 : : - 207 : : /** - 208 : : * @notice Returns the number of whitelisted addresses. - 209 : : */ - 210 : 5 : function whitelistAddressCount() public view returns (uint256) { - 211 : 5 : return _whitelistCount(); - 212 : : } - 213 : : - 214 : : /** - 215 : : * @notice Returns true if the address is in the whitelist. - 216 : : */ - 217 : 13 : function isWhitelisted(address targetAddress) public view returns (bool) { - 218 : 13 : return _isWhitelisted(targetAddress); - 219 : : } - 220 : : - 221 : : /** - 222 : : * @notice ERC-2980 getter: returns true if the address is whitelisted. - 223 : : */ - 224 : 5 : function whitelist(address _operator) public view virtual override(IERC2980) returns (bool) { - 225 : 5 : return _isWhitelisted(_operator); - 226 : : } - 227 : : - 228 : : /** - 229 : : * @notice Returns true if the address is whitelisted (identity-verified). - 230 : : * @dev Reflects whitelist membership only. Frozen status is intentionally excluded: - 231 : : * freezing is a temporary enforcement action and does not revoke identity verification. - 232 : : */ - 233 : 3 : function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { - 234 : 3 : return _isWhitelisted(targetAddress); - 235 : : } - 236 : : - 237 : : /** - 238 : : * @notice Checks multiple addresses for whitelist membership. - 239 : : */ - 240 : 1 : function areWhitelisted(address[] memory targetAddresses) public view returns (bool[] memory results) { - 241 : 1 : results = new bool[](targetAddresses.length); - 242 : 1 : for (uint256 i = 0; i < targetAddresses.length; ++i) { - 243 : 2 : results[i] = _isWhitelisted(targetAddresses[i]); - 244 : : } - 245 : : } - 246 : : - 247 : : /*////////////////////////////////////////////////////////////// - 248 : : FROZENLIST MANAGEMENT - 249 : : //////////////////////////////////////////////////////////////*/ - 250 : : - 251 : : /** - 252 : : * @notice Adds multiple addresses to the frozenlist. - 253 : : * @dev Does not revert if an address is already listed. - 254 : : */ - 255 : 6 : function addFrozenlistAddresses(address[] calldata targetAddresses) public onlyFrozenlistAdd { - 256 : 4 : _addFrozenlistAddresses(targetAddresses); - 257 : 4 : emit AddFrozenlistAddresses(targetAddresses); - 258 : : } - 259 : : - 260 : : /** - 261 : : * @notice Removes multiple addresses from the frozenlist. - 262 : : * @dev Does not revert if an address is not listed. - 263 : : */ - 264 : 2 : function removeFrozenlistAddresses(address[] calldata targetAddresses) public onlyFrozenlistRemove { - 265 : 2 : _removeFrozenlistAddresses(targetAddresses); - 266 : 2 : emit RemoveFrozenlistAddresses(targetAddresses); - 267 : : } - 268 : : - 269 : : /** - 270 : : * @notice Adds a single address to the frozenlist. - 271 : : * @dev - 272 : : * Reverts if the address is already listed. - 273 : : * Deviation from ERC-2980 `Freezable` example interface: the spec's `addAddressToFrozenlist` - 274 : : * returns `false` on duplicates instead of reverting. This implementation follows the codebase - 275 : : * convention of reverting on invalid single-item operations. + 41 : 67 : constructor(address forwarderIrrevocable, bool allowBurn) MetaTxModuleStandalone(forwarderIrrevocable) { + 42 [ + ]: 2 : if (allowBurn) { + 43 : 2 : _addWhitelistAddress(address(0)); + 44 : 2 : emit AddWhitelistAddress(address(0)); + 45 : : } + 46 : : } + 47 : : + 48 : : /*////////////////////////////////////////////////////////////// + 49 : : ACCESS CONTROL + 50 : : //////////////////////////////////////////////////////////////*/ + 51 : : + 52 : 6 : modifier onlyWhitelistAdd() { + 53 : 6 : _authorizeWhitelistAdd(); + 54 : : _; + 55 : : } + 56 : : + 57 : 7 : modifier onlyWhitelistRemove() { + 58 : 7 : _authorizeWhitelistRemove(); + 59 : : _; + 60 : : } + 61 : : + 62 : 6 : modifier onlyFrozenlistAdd() { + 63 : 6 : _authorizeFrozenlistAdd(); + 64 : : _; + 65 : : } + 66 : : + 67 : 2 : modifier onlyFrozenlistRemove() { + 68 : 2 : _authorizeFrozenlistRemove(); + 69 : : _; + 70 : : } + 71 : : + 72 : 0 : function _authorizeWhitelistAdd() internal view virtual; + 73 : 0 : function _authorizeWhitelistRemove() internal view virtual; + 74 : 0 : function _authorizeFrozenlistAdd() internal view virtual; + 75 : 0 : function _authorizeFrozenlistRemove() internal view virtual; + 76 : : + 77 : : /*////////////////////////////////////////////////////////////// + 78 : : WHITELIST MANAGEMENT + 79 : : //////////////////////////////////////////////////////////////*/ + 80 : : + 81 : : /** + 82 : : * @notice Adds multiple addresses to the whitelist. + 83 : : * @dev Does not revert if an address is already listed. + 84 : : */ + 85 : 6 : function addWhitelistAddresses(address[] calldata targetAddresses) public onlyWhitelistAdd { + 86 : 4 : _addWhitelistAddresses(targetAddresses); + 87 : 4 : emit AddWhitelistAddresses(targetAddresses); + 88 : : } + 89 : : + 90 : : /** + 91 : : * @notice Removes multiple addresses from the whitelist. + 92 : : * @dev Does not revert if an address is not listed. + 93 : : */ + 94 : 4 : function removeWhitelistAddresses(address[] calldata targetAddresses) public onlyWhitelistRemove { + 95 : 3 : _removeWhitelistAddresses(targetAddresses); + 96 : 3 : emit RemoveWhitelistAddresses(targetAddresses); + 97 : : } + 98 : : + 99 : : /** + 100 : : * @notice Adds a single address to the whitelist. + 101 : : * @dev + 102 : : * Reverts if the address is already listed. + 103 : : * Deviation from ERC-2980 `Whitelistable` example interface: the spec's `addAddressToWhitelist` + 104 : : * returns `false` on duplicates instead of reverting. This implementation follows the codebase + 105 : : * convention of reverting on invalid single-item operations. + 106 : : */ + 107 : 45 : function addWhitelistAddress(address targetAddress) public onlyWhitelistAdd { + 108 [ + + ]: 42 : require(!_isWhitelisted(targetAddress), RuleERC2980_AddressAlreadyListed()); + 109 : 41 : _addWhitelistAddress(targetAddress); + 110 : 41 : emit AddWhitelistAddress(targetAddress); + 111 : : } + 112 : : + 113 : : /** + 114 : : * @notice Removes a single address from the whitelist. + 115 : : * @dev + 116 : : * Reverts if the address is not listed. + 117 : : * Deviation from ERC-2980 `Whitelistable` example interface: the spec's `removeAddressFromWhitelist` + 118 : : * returns `false` when not found instead of reverting. This implementation follows the codebase + 119 : : * convention of reverting on invalid single-item operations. + 120 : : */ + 121 : 7 : function removeWhitelistAddress(address targetAddress) public onlyWhitelistRemove { + 122 [ + + ]: 5 : require(_isWhitelisted(targetAddress), RuleERC2980_AddressNotFound()); + 123 : 4 : _removeWhitelistAddress(targetAddress); + 124 : 4 : emit RemoveWhitelistAddress(targetAddress); + 125 : : } + 126 : : + 127 : : /*////////////////////////////////////////////////////////////// + 128 : : FROZENLIST MANAGEMENT + 129 : : //////////////////////////////////////////////////////////////*/ + 130 : : + 131 : : /** + 132 : : * @notice Adds multiple addresses to the frozenlist. + 133 : : * @dev Does not revert if an address is already listed. + 134 : : */ + 135 : 6 : function addFrozenlistAddresses(address[] calldata targetAddresses) public onlyFrozenlistAdd { + 136 : 4 : _addFrozenlistAddresses(targetAddresses); + 137 : 4 : emit AddFrozenlistAddresses(targetAddresses); + 138 : : } + 139 : : + 140 : : /** + 141 : : * @notice Removes multiple addresses from the frozenlist. + 142 : : * @dev Does not revert if an address is not listed. + 143 : : */ + 144 : 2 : function removeFrozenlistAddresses(address[] calldata targetAddresses) public onlyFrozenlistRemove { + 145 : 2 : _removeFrozenlistAddresses(targetAddresses); + 146 : 2 : emit RemoveFrozenlistAddresses(targetAddresses); + 147 : : } + 148 : : + 149 : : /** + 150 : : * @notice Adds a single address to the frozenlist. + 151 : : * @dev + 152 : : * Reverts if the address is already listed. + 153 : : * Deviation from ERC-2980 `Freezable` example interface: the spec's `addAddressToFrozenlist` + 154 : : * returns `false` on duplicates instead of reverting. This implementation follows the codebase + 155 : : * convention of reverting on invalid single-item operations. + 156 : : */ + 157 : 22 : function addFrozenlistAddress(address targetAddress) public onlyFrozenlistAdd { + 158 [ + + ]: 19 : require(!_isFrozen(targetAddress), RuleERC2980_AddressAlreadyListed()); + 159 : 18 : _addFrozenlistAddress(targetAddress); + 160 : 18 : emit AddFrozenlistAddress(targetAddress); + 161 : : } + 162 : : + 163 : : /** + 164 : : * @notice Removes a single address from the frozenlist. + 165 : : * @dev + 166 : : * Reverts if the address is not listed. + 167 : : * Deviation from ERC-2980 `Freezable` example interface: the spec's `removeAddressFromFrozenlist` + 168 : : * returns `false` when not found instead of reverting. This implementation follows the codebase + 169 : : * convention of reverting on invalid single-item operations. + 170 : : */ + 171 : 7 : function removeFrozenlistAddress(address targetAddress) public onlyFrozenlistRemove { + 172 [ + + ]: 5 : require(_isFrozen(targetAddress), RuleERC2980_AddressNotFound()); + 173 : 4 : _removeFrozenlistAddress(targetAddress); + 174 : 4 : emit RemoveFrozenlistAddress(targetAddress); + 175 : : } + 176 : : + 177 : : /*////////////////////////////////////////////////////////////// + 178 : : PUBLIC FUNCTIONS + 179 : : //////////////////////////////////////////////////////////////*/ + 180 : : + 181 : 4 : function transferred(address from, address to, uint256 value) + 182 : : public + 183 : : view + 184 : : virtual + 185 : : override(IERC3643IComplianceContract) + 186 : : { + 187 : 4 : _transferred(from, to, value); + 188 : : } + 189 : : + 190 : 2 : function transferred(address spender, address from, address to, uint256 value) + 191 : : public + 192 : : view + 193 : : virtual + 194 : : override(IRuleEngine) + 195 : : { + 196 : 2 : _transferredFrom(spender, from, to, value); + 197 : : } + 198 : : + 199 : 5 : function canReturnTransferRestrictionCode(uint8 restrictionCode) + 200 : : public + 201 : : pure + 202 : : virtual + 203 : : override(IRule) + 204 : : returns (bool) + 205 : : { + 206 : 5 : return restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_IS_FROZEN + 207 : 3 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED; + 208 : : } + 209 : : + 210 : 5 : function messageForTransferRestriction(uint8 restrictionCode) + 211 : : public + 212 : : pure + 213 : : virtual + 214 : : override(IERC1404) + 215 : : returns (string memory) + 216 : : { + 217 [ + + ]: 5 : if (restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN) { + 218 : 1 : return TEXT_ADDRESS_FROM_IS_FROZEN; + 219 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_FROZEN) { + 220 : 1 : return TEXT_ADDRESS_TO_IS_FROZEN; + 221 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN) { + 222 : 1 : return TEXT_ADDRESS_SPENDER_IS_FROZEN; + 223 [ + + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { + 224 : 1 : return TEXT_ADDRESS_TO_NOT_WHITELISTED; + 225 : : } else { + 226 : 1 : return TEXT_CODE_NOT_FOUND; + 227 : : } + 228 : : } + 229 : : + 230 : 1 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { + 231 : 1 : return RuleTransferValidation.supportsInterface(interfaceId); + 232 : : } + 233 : : + 234 : : /** + 235 : : * @notice Returns the number of whitelisted addresses. + 236 : : */ + 237 : 5 : function whitelistAddressCount() public view returns (uint256) { + 238 : 5 : return _whitelistCount(); + 239 : : } + 240 : : + 241 : : /** + 242 : : * @notice Returns true if the address is in the whitelist. + 243 : : */ + 244 : 14 : function isWhitelisted(address targetAddress) public view returns (bool) { + 245 : 14 : return _isWhitelisted(targetAddress); + 246 : : } + 247 : : + 248 : : /** + 249 : : * @notice ERC-2980 getter: returns true if the address is whitelisted. + 250 : : */ + 251 : 7 : function whitelist(address _operator) public view virtual override(IERC2980) returns (bool) { + 252 : 7 : return _isWhitelisted(_operator); + 253 : : } + 254 : : + 255 : : /** + 256 : : * @notice Returns true if the address is whitelisted (identity-verified). + 257 : : * @dev Reflects whitelist membership only. Frozen status is intentionally excluded: + 258 : : * freezing is a temporary enforcement action and does not revoke identity verification. + 259 : : */ + 260 : 3 : function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { + 261 : 3 : return _isWhitelisted(targetAddress); + 262 : : } + 263 : : + 264 : : /** + 265 : : * @notice Checks multiple addresses for whitelist membership. + 266 : : */ + 267 : 1 : function areWhitelisted(address[] memory targetAddresses) public view returns (bool[] memory results) { + 268 : 1 : results = new bool[](targetAddresses.length); + 269 : 1 : for (uint256 i = 0; i < targetAddresses.length; ++i) { + 270 : 2 : results[i] = _isWhitelisted(targetAddresses[i]); + 271 : : } + 272 : : } + 273 : : + 274 : : /** + 275 : : * @notice Returns the number of frozen addresses. 276 : : */ - 277 : 22 : function addFrozenlistAddress(address targetAddress) public onlyFrozenlistAdd { - 278 [ + + ]: 19 : require(!_isFrozen(targetAddress), RuleERC2980_AddressAlreadyListed()); - 279 : 18 : _addFrozenlistAddress(targetAddress); - 280 : 18 : emit AddFrozenlistAddress(targetAddress); - 281 : : } - 282 : : - 283 : : /** - 284 : : * @notice Removes a single address from the frozenlist. - 285 : : * @dev - 286 : : * Reverts if the address is not listed. - 287 : : * Deviation from ERC-2980 `Freezable` example interface: the spec's `removeAddressFromFrozenlist` - 288 : : * returns `false` when not found instead of reverting. This implementation follows the codebase - 289 : : * convention of reverting on invalid single-item operations. + 277 : 4 : function frozenlistAddressCount() public view returns (uint256) { + 278 : 4 : return _frozenlistCount(); + 279 : : } + 280 : : + 281 : : /** + 282 : : * @notice Returns true if the address is in the frozenlist. + 283 : : */ + 284 : 12 : function isFrozen(address targetAddress) public view returns (bool) { + 285 : 12 : return _isFrozen(targetAddress); + 286 : : } + 287 : : + 288 : : /** + 289 : : * @notice ERC-2980 getter: returns true if the address is frozen. 290 : : */ - 291 : 7 : function removeFrozenlistAddress(address targetAddress) public onlyFrozenlistRemove { - 292 [ + + ]: 5 : require(_isFrozen(targetAddress), RuleERC2980_AddressNotFound()); - 293 : 4 : _removeFrozenlistAddress(targetAddress); - 294 : 4 : emit RemoveFrozenlistAddress(targetAddress); - 295 : : } - 296 : : - 297 : : /** - 298 : : * @notice Returns the number of frozen addresses. - 299 : : */ - 300 : 4 : function frozenlistAddressCount() public view returns (uint256) { - 301 : 4 : return _frozenlistCount(); - 302 : : } - 303 : : - 304 : : /** - 305 : : * @notice Returns true if the address is in the frozenlist. - 306 : : */ - 307 : 12 : function isFrozen(address targetAddress) public view returns (bool) { - 308 : 12 : return _isFrozen(targetAddress); - 309 : : } - 310 : : - 311 : : /** - 312 : : * @notice ERC-2980 getter: returns true if the address is frozen. - 313 : : */ - 314 : 4 : function frozenlist(address _operator) public view virtual override(IERC2980) returns (bool) { - 315 : 4 : return _isFrozen(_operator); - 316 : : } - 317 : : - 318 : : /** - 319 : : * @notice Checks multiple addresses for frozenlist membership. - 320 : : */ - 321 : 1 : function areFrozen(address[] memory targetAddresses) public view returns (bool[] memory results) { - 322 : 1 : results = new bool[](targetAddresses.length); - 323 : 1 : for (uint256 i = 0; i < targetAddresses.length; ++i) { - 324 : 2 : results[i] = _isFrozen(targetAddresses[i]); + 291 : 4 : function frozenlist(address _operator) public view virtual override(IERC2980) returns (bool) { + 292 : 4 : return _isFrozen(_operator); + 293 : : } + 294 : : + 295 : : /** + 296 : : * @notice Checks multiple addresses for frozenlist membership. + 297 : : */ + 298 : 1 : function areFrozen(address[] memory targetAddresses) public view returns (bool[] memory results) { + 299 : 1 : results = new bool[](targetAddresses.length); + 300 : 1 : for (uint256 i = 0; i < targetAddresses.length; ++i) { + 301 : 2 : results[i] = _isFrozen(targetAddresses[i]); + 302 : : } + 303 : : } + 304 : : + 305 : : /*////////////////////////////////////////////////////////////// + 306 : : INTERNAL FUNCTIONS + 307 : : //////////////////////////////////////////////////////////////*/ + 308 : : + 309 : 24 : function _detectTransferRestriction( + 310 : : address from, + 311 : : address to, + 312 : : uint256 /* value */ + 313 : : ) + 314 : : internal + 315 : : view + 316 : : virtual + 317 : : override + 318 : : returns (uint8) + 319 : : { + 320 : : // Frozenlist check has priority + 321 [ + + ]: 24 : if (_isFrozen(from)) { + 322 : 4 : return CODE_ADDRESS_FROM_IS_FROZEN; + 323 [ + ]: 20 : } else if (_isFrozen(to)) { + 324 : 4 : return CODE_ADDRESS_TO_IS_FROZEN; 325 : : } - 326 : : } - 327 : : - 328 : : /*////////////////////////////////////////////////////////////// - 329 : : INTERFACE SUPPORT - 330 : : //////////////////////////////////////////////////////////////*/ - 331 : : - 332 : 1 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { - 333 : 1 : return RuleTransferValidation.supportsInterface(interfaceId); - 334 : : } - 335 : : - 336 : : /*////////////////////////////////////////////////////////////// - 337 : : ACCESS CONTROL - 338 : : //////////////////////////////////////////////////////////////*/ - 339 : : - 340 : 6 : modifier onlyWhitelistAdd() { - 341 : 6 : _authorizeWhitelistAdd(); - 342 : : _; - 343 : : } - 344 : : - 345 : 7 : modifier onlyWhitelistRemove() { - 346 : 7 : _authorizeWhitelistRemove(); - 347 : : _; - 348 : : } - 349 : : - 350 : 6 : modifier onlyFrozenlistAdd() { - 351 : 6 : _authorizeFrozenlistAdd(); - 352 : : _; - 353 : : } - 354 : : - 355 : 2 : modifier onlyFrozenlistRemove() { - 356 : 2 : _authorizeFrozenlistRemove(); - 357 : : _; - 358 : : } - 359 : : - 360 : : function _authorizeWhitelistAdd() internal view virtual; - 361 : : function _authorizeWhitelistRemove() internal view virtual; - 362 : : function _authorizeFrozenlistAdd() internal view virtual; - 363 : : function _authorizeFrozenlistRemove() internal view virtual; - 364 : : - 365 : : /*////////////////////////////////////////////////////////////// - 366 : : ERC-2771 META TX - 367 : : //////////////////////////////////////////////////////////////*/ - 368 : : - 369 : 267 : function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { - 370 : 267 : return ERC2771Context._msgSender(); - 371 : : } - 372 : : - 373 : 2 : function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { - 374 : 2 : return ERC2771Context._msgData(); - 375 : : } - 376 : : - 377 : 269 : function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { - 378 : 269 : return ERC2771Context._contextSuffixLength(); - 379 : : } - 380 : : } + 326 : : // Whitelist check: only the recipient must be whitelisted + 327 [ + ]: 16 : if (!_isWhitelisted(to)) { + 328 : 5 : return CODE_ADDRESS_TO_NOT_WHITELISTED; + 329 : : } + 330 : 11 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 331 : : } + 332 : : + 333 : 8 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 334 : : internal + 335 : : view + 336 : : virtual + 337 : : override + 338 : : returns (uint8) + 339 : : { + 340 [ + ]: 8 : if (_isFrozen(spender)) { + 341 : 4 : return CODE_ADDRESS_SPENDER_IS_FROZEN; + 342 : : } + 343 : 4 : return _detectTransferRestriction(from, to, value); + 344 : : } + 345 : : + 346 : 5 : function _transferred(address from, address to, uint256 value) internal view virtual override { + 347 : 5 : uint8 code = _detectTransferRestriction(from, to, value); + 348 [ + + ]: 5 : require( + 349 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 350 : : RuleERC2980_InvalidTransfer(address(this), from, to, value, code) + 351 : : ); + 352 : : } + 353 : : + 354 : 3 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 355 : 3 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 356 [ + + ]: 3 : require( + 357 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 358 : : RuleERC2980_InvalidTransferFrom(address(this), spender, from, to, value, code) + 359 : : ); + 360 : : } + 361 : : + 362 : 272 : function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { + 363 : 272 : return ERC2771Context._msgSender(); + 364 : : } + 365 : : + 366 : 2 : function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { + 367 : 2 : return ERC2771Context._msgData(); + 368 : : } + 369 : : + 370 : 274 : function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { + 371 : 274 : return ERC2771Context._contextSuffixLength(); + 372 : : } + 373 : : } @@ -456,7 +449,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html index 09d303a..0798224 100644 --- a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleIdentityRegistryBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,74 +53,78 @@ - +
Current view:top level - abstract/base - RuleIdentityRegistryBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleIdentityRegistryBase.sol (source / functions) Hit Lines: 5151100.0 %5298.1 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
19 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistryBase._transferredRuleIdentityRegistryBase._authorizeIdentityRegistryManager0
RuleIdentityRegistryBase._transferred 2
RuleIdentityRegistryBase._transferredFromRuleIdentityRegistryBase._transferredFrom 2
RuleIdentityRegistryBase.transferred.0RuleIdentityRegistryBase.transferred.0 2
RuleIdentityRegistryBase.transferred.1RuleIdentityRegistryBase.transferred.1 2
RuleIdentityRegistryBase.canReturnTransferRestrictionCodeRuleIdentityRegistryBase.canReturnTransferRestrictionCode 4
RuleIdentityRegistryBase.messageForTransferRestrictionRuleIdentityRegistryBase.messageForTransferRestriction 4
RuleIdentityRegistryBase.setIdentityRegistryRuleIdentityRegistryBase.setIdentityRegistry 4
RuleIdentityRegistryBase.clearIdentityRegistryRuleIdentityRegistryBase.clearIdentityRegistry 5
RuleIdentityRegistryBase.onlyIdentityRegistryManagerRuleIdentityRegistryBase.onlyIdentityRegistryManager 5
RuleIdentityRegistryBase._detectTransferRestrictionFromRuleIdentityRegistryBase._detectTransferRestrictionFrom 9
RuleIdentityRegistryBase._detectTransferRestrictionRuleIdentityRegistryBase._detectTransferRestriction 16
RuleIdentityRegistryBase.constructorRuleIdentityRegistryBase.constructor 26

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func.html index 39a7d2d..36cb85d 100644 --- a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleIdentityRegistryBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,74 +53,78 @@ - +
Current view:top level - abstract/base - RuleIdentityRegistryBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleIdentityRegistryBase.sol (source / functions) Hit Lines: 5151100.0 %5298.1 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
19 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistryBase._detectTransferRestrictionRuleIdentityRegistryBase._authorizeIdentityRegistryManager0
RuleIdentityRegistryBase._detectTransferRestriction 16
RuleIdentityRegistryBase._detectTransferRestrictionFromRuleIdentityRegistryBase._detectTransferRestrictionFrom 9
RuleIdentityRegistryBase._transferredRuleIdentityRegistryBase._transferred 2
RuleIdentityRegistryBase._transferredFromRuleIdentityRegistryBase._transferredFrom 2
RuleIdentityRegistryBase.canReturnTransferRestrictionCodeRuleIdentityRegistryBase.canReturnTransferRestrictionCode 4
RuleIdentityRegistryBase.clearIdentityRegistryRuleIdentityRegistryBase.clearIdentityRegistry 5
RuleIdentityRegistryBase.constructorRuleIdentityRegistryBase.constructor 26
RuleIdentityRegistryBase.messageForTransferRestrictionRuleIdentityRegistryBase.messageForTransferRestriction 4
RuleIdentityRegistryBase.onlyIdentityRegistryManagerRuleIdentityRegistryBase.onlyIdentityRegistryManager 5
RuleIdentityRegistryBase.setIdentityRegistryRuleIdentityRegistryBase.setIdentityRegistry 4
RuleIdentityRegistryBase.transferred.0RuleIdentityRegistryBase.transferred.0 2
RuleIdentityRegistryBase.transferred.1RuleIdentityRegistryBase.transferred.1 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.gcov.html similarity index 57% rename from doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.gcov.html index 6e8d3ac..a9bd14c 100644 --- a/doc/coverage/coverage/abstract/base/RuleIdentityRegistryBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleIdentityRegistryBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleIdentityRegistryBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleIdentityRegistryBase.sol (source / functions) Hit Lines: 5151100.0 %5298.1 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
19 100.0 %
@@ -87,123 +87,140 @@ 16 : : abstract contract RuleIdentityRegistryBase is RuleNFTAdapter, RuleIdentityRegistryInvariantStorage { 17 : : IIdentityRegistryVerified public identityRegistry; 18 : : - 19 : 26 : constructor(address identityRegistry_) { - 20 [ + ]: 26 : if (identityRegistry_ != address(0)) { - 21 : 25 : identityRegistry = IIdentityRegistryVerified(identityRegistry_); - 22 : : } - 23 : : } - 24 : : - 25 : 4 : function setIdentityRegistry(address newRegistry) public onlyIdentityRegistryManager { - 26 [ + + ]: 2 : require(newRegistry != address(0), RuleIdentityRegistry_RegistryAddressZeroNotAllowed()); - 27 : 1 : identityRegistry = IIdentityRegistryVerified(newRegistry); - 28 : 1 : emit IdentityRegistryUpdated(newRegistry); - 29 : : } - 30 : : - 31 : 5 : function clearIdentityRegistry() public onlyIdentityRegistryManager { - 32 : 3 : identityRegistry = IIdentityRegistryVerified(address(0)); - 33 : 3 : emit IdentityRegistryUpdated(address(0)); - 34 : : } - 35 : : - 36 : 16 : function _detectTransferRestriction( - 37 : : address from, - 38 : : address to, - 39 : : uint256 /* value */ - 40 : : ) - 41 : : internal - 42 : : view - 43 : : override - 44 : : returns (uint8) - 45 : : { - 46 [ + ]: 16 : if (address(identityRegistry) == address(0)) { - 47 : 3 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 48 : : } - 49 [ + ]: 13 : if (to == address(0)) { - 50 : 2 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 51 : : } + 19 : : /*////////////////////////////////////////////////////////////// + 20 : : CONSTRUCTOR + 21 : : //////////////////////////////////////////////////////////////*/ + 22 : : + 23 : 26 : constructor(address identityRegistry_) { + 24 [ + ]: 26 : if (identityRegistry_ != address(0)) { + 25 : 25 : identityRegistry = IIdentityRegistryVerified(identityRegistry_); + 26 : : } + 27 : : } + 28 : : + 29 : : /*////////////////////////////////////////////////////////////// + 30 : : ACCESS CONTROL + 31 : : //////////////////////////////////////////////////////////////*/ + 32 : : + 33 : 5 : modifier onlyIdentityRegistryManager() { + 34 : 5 : _authorizeIdentityRegistryManager(); + 35 : : _; + 36 : : } + 37 : : + 38 : 0 : function _authorizeIdentityRegistryManager() internal view virtual; + 39 : : + 40 : : /*////////////////////////////////////////////////////////////// + 41 : : EXTERNAL FUNCTIONS + 42 : : //////////////////////////////////////////////////////////////*/ + 43 : : + 44 : 4 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { + 45 : 4 : return restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED || restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED + 46 : 2 : || restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED; + 47 : : } + 48 : : + 49 : : /*////////////////////////////////////////////////////////////// + 50 : : PUBLIC FUNCTIONS + 51 : : //////////////////////////////////////////////////////////////*/ 52 : : - 53 [ + ]: 11 : if (from != address(0) && !identityRegistry.isVerified(from)) { - 54 : 4 : return CODE_ADDRESS_FROM_NOT_VERIFIED; - 55 : : } - 56 [ + ]: 7 : if (to != address(0) && !identityRegistry.isVerified(to)) { - 57 : 1 : return CODE_ADDRESS_TO_NOT_VERIFIED; - 58 : : } - 59 : 6 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 60 : : } - 61 : : - 62 : 9 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 63 : : internal - 64 : : view - 65 : : override - 66 : : returns (uint8) - 67 : : { - 68 [ + ]: 9 : if (address(identityRegistry) == address(0)) { - 69 : 1 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 70 : : } - 71 [ + ]: 8 : if (to == address(0)) { - 72 : 1 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 73 : : } - 74 [ + ]: 7 : if (spender != address(0) && !identityRegistry.isVerified(spender)) { - 75 : 4 : return CODE_ADDRESS_SPENDER_NOT_VERIFIED; - 76 : : } - 77 : 3 : return _detectTransferRestriction(from, to, value); - 78 : : } - 79 : : - 80 : 2 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - 81 : 2 : _transferred(from, to, value); - 82 : : } - 83 : : - 84 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - 85 : 2 : _transferredFrom(spender, from, to, value); + 53 : 4 : function setIdentityRegistry(address newRegistry) public onlyIdentityRegistryManager { + 54 [ + + ]: 2 : require(newRegistry != address(0), RuleIdentityRegistry_RegistryAddressZeroNotAllowed()); + 55 : 1 : identityRegistry = IIdentityRegistryVerified(newRegistry); + 56 : 1 : emit IdentityRegistryUpdated(newRegistry); + 57 : : } + 58 : : + 59 : 5 : function clearIdentityRegistry() public onlyIdentityRegistryManager { + 60 : 3 : identityRegistry = IIdentityRegistryVerified(address(0)); + 61 : 3 : emit IdentityRegistryUpdated(address(0)); + 62 : : } + 63 : : + 64 : 2 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + 65 : 2 : _transferred(from, to, value); + 66 : : } + 67 : : + 68 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + 69 : 2 : _transferredFrom(spender, from, to, value); + 70 : : } + 71 : : + 72 : 4 : function messageForTransferRestriction(uint8 restrictionCode) + 73 : : public + 74 : : pure + 75 : : override(IERC1404) + 76 : : returns (string memory) + 77 : : { + 78 [ + + ]: 4 : if (restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED) { + 79 : 1 : return TEXT_ADDRESS_FROM_NOT_VERIFIED; + 80 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED) { + 81 : 1 : return TEXT_ADDRESS_TO_NOT_VERIFIED; + 82 [ + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED) { + 83 : 1 : return TEXT_ADDRESS_SPENDER_NOT_VERIFIED; + 84 : : } + 85 : 1 : return TEXT_CODE_NOT_FOUND; 86 : : } 87 : : - 88 : 2 : function _transferred(address from, address to, uint256 value) internal view virtual override { - 89 : 2 : uint8 code = _detectTransferRestriction(from, to, value); - 90 [ + + ]: 2 : require( - 91 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 92 : : RuleIdentityRegistry_InvalidTransfer(address(this), from, to, value, code) - 93 : : ); - 94 : : } - 95 : : - 96 : 2 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 97 : 2 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 98 [ + + ]: 2 : require( - 99 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 100 : : RuleIdentityRegistry_InvalidTransferFrom(address(this), spender, from, to, value, code) - 101 : : ); - 102 : : } - 103 : : - 104 : 4 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { - 105 : 4 : return restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED || restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED - 106 : 2 : || restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED; - 107 : : } + 88 : : /*////////////////////////////////////////////////////////////// + 89 : : INTERNAL FUNCTIONS + 90 : : //////////////////////////////////////////////////////////////*/ + 91 : : + 92 : 16 : function _detectTransferRestriction( + 93 : : address from, + 94 : : address to, + 95 : : uint256 /* value */ + 96 : : ) + 97 : : internal + 98 : : view + 99 : : override + 100 : : returns (uint8) + 101 : : { + 102 [ + ]: 16 : if (address(identityRegistry) == address(0)) { + 103 : 3 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 104 : : } + 105 [ + ]: 13 : if (to == address(0)) { + 106 : 2 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 107 : : } 108 : : - 109 : 4 : function messageForTransferRestriction(uint8 restrictionCode) - 110 : : public - 111 : : pure - 112 : : override(IERC1404) - 113 : : returns (string memory) - 114 : : { - 115 [ + + ]: 4 : if (restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED) { - 116 : 1 : return TEXT_ADDRESS_FROM_NOT_VERIFIED; - 117 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED) { - 118 : 1 : return TEXT_ADDRESS_TO_NOT_VERIFIED; - 119 [ + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED) { - 120 : 1 : return TEXT_ADDRESS_SPENDER_NOT_VERIFIED; - 121 : : } - 122 : 1 : return TEXT_CODE_NOT_FOUND; - 123 : : } - 124 : : - 125 : : /*////////////////////////////////////////////////////////////// - 126 : : ACCESS CONTROL - 127 : : //////////////////////////////////////////////////////////////*/ - 128 : : - 129 : 5 : modifier onlyIdentityRegistryManager() { - 130 : 5 : _authorizeIdentityRegistryManager(); - 131 : : _; - 132 : : } - 133 : : - 134 : : function _authorizeIdentityRegistryManager() internal view virtual; - 135 : : } + 109 [ + ]: 11 : if (from != address(0) && !identityRegistry.isVerified(from)) { + 110 : 4 : return CODE_ADDRESS_FROM_NOT_VERIFIED; + 111 : : } + 112 [ + ]: 7 : if (to != address(0) && !identityRegistry.isVerified(to)) { + 113 : 1 : return CODE_ADDRESS_TO_NOT_VERIFIED; + 114 : : } + 115 : 6 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 116 : : } + 117 : : + 118 : 9 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 119 : : internal + 120 : : view + 121 : : override + 122 : : returns (uint8) + 123 : : { + 124 [ + ]: 9 : if (address(identityRegistry) == address(0)) { + 125 : 1 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 126 : : } + 127 [ + ]: 8 : if (to == address(0)) { + 128 : 1 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 129 : : } + 130 [ + ]: 7 : if (spender != address(0) && !identityRegistry.isVerified(spender)) { + 131 : 4 : return CODE_ADDRESS_SPENDER_NOT_VERIFIED; + 132 : : } + 133 : 3 : return _detectTransferRestriction(from, to, value); + 134 : : } + 135 : : + 136 : 2 : function _transferred(address from, address to, uint256 value) internal view virtual override { + 137 : 2 : uint8 code = _detectTransferRestriction(from, to, value); + 138 [ + + ]: 2 : require( + 139 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 140 : : RuleIdentityRegistry_InvalidTransfer(address(this), from, to, value, code) + 141 : : ); + 142 : : } + 143 : : + 144 : 2 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 145 : 2 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 146 [ + + ]: 2 : require( + 147 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 148 : : RuleIdentityRegistry_InvalidTransferFrom(address(this), spender, from, to, value, code) + 149 : : ); + 150 : : } + 151 : : + 152 : : } @@ -211,7 +228,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html index f2efd55..1c84b39 100644 --- a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleMaxTotalSupplyBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,74 +53,78 @@ - +
Current view:top level - abstract/base - RuleMaxTotalSupplyBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleMaxTotalSupplyBase.sol (source / functions) Hit Lines: 3737100.0 %3897.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
11 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupplyBase._detectTransferRestrictionFromRuleMaxTotalSupplyBase._authorizeMaxTotalSupplyManager0
RuleMaxTotalSupplyBase._detectTransferRestrictionFrom 2
RuleMaxTotalSupplyBase._transferredRuleMaxTotalSupplyBase._transferred 2
RuleMaxTotalSupplyBase._transferredFromRuleMaxTotalSupplyBase._transferredFrom 2
RuleMaxTotalSupplyBase.canReturnTransferRestrictionCodeRuleMaxTotalSupplyBase.canReturnTransferRestrictionCode 2
RuleMaxTotalSupplyBase.messageForTransferRestrictionRuleMaxTotalSupplyBase.messageForTransferRestriction 2
RuleMaxTotalSupplyBase.transferred.0RuleMaxTotalSupplyBase.transferred.0 2
RuleMaxTotalSupplyBase.transferred.1RuleMaxTotalSupplyBase.transferred.1 2
RuleMaxTotalSupplyBase.setTokenContractRuleMaxTotalSupplyBase.setTokenContract 4
RuleMaxTotalSupplyBase.constructorRuleMaxTotalSupplyBase.constructor 25
RuleMaxTotalSupplyBase.onlyMaxTotalSupplyManagerRuleMaxTotalSupplyBase.onlyMaxTotalSupplyManager 260
RuleMaxTotalSupplyBase.setMaxTotalSupplyRuleMaxTotalSupplyBase.setMaxTotalSupply 260
RuleMaxTotalSupplyBase._detectTransferRestrictionRuleMaxTotalSupplyBase._detectTransferRestriction 271

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func.html index 3ca3e52..6cd4772 100644 --- a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleMaxTotalSupplyBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,74 +53,78 @@ - +
Current view:top level - abstract/base - RuleMaxTotalSupplyBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleMaxTotalSupplyBase.sol (source / functions) Hit Lines: 3737100.0 %3897.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
11 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupplyBase._detectTransferRestrictionRuleMaxTotalSupplyBase._authorizeMaxTotalSupplyManager0
RuleMaxTotalSupplyBase._detectTransferRestriction 271
RuleMaxTotalSupplyBase._detectTransferRestrictionFromRuleMaxTotalSupplyBase._detectTransferRestrictionFrom 2
RuleMaxTotalSupplyBase._transferredRuleMaxTotalSupplyBase._transferred 2
RuleMaxTotalSupplyBase._transferredFromRuleMaxTotalSupplyBase._transferredFrom 2
RuleMaxTotalSupplyBase.canReturnTransferRestrictionCodeRuleMaxTotalSupplyBase.canReturnTransferRestrictionCode 2
RuleMaxTotalSupplyBase.constructorRuleMaxTotalSupplyBase.constructor 25
RuleMaxTotalSupplyBase.messageForTransferRestrictionRuleMaxTotalSupplyBase.messageForTransferRestriction 2
RuleMaxTotalSupplyBase.onlyMaxTotalSupplyManagerRuleMaxTotalSupplyBase.onlyMaxTotalSupplyManager 260
RuleMaxTotalSupplyBase.setMaxTotalSupplyRuleMaxTotalSupplyBase.setMaxTotalSupply 260
RuleMaxTotalSupplyBase.setTokenContractRuleMaxTotalSupplyBase.setTokenContract 4
RuleMaxTotalSupplyBase.transferred.0RuleMaxTotalSupplyBase.transferred.0 2
RuleMaxTotalSupplyBase.transferred.1RuleMaxTotalSupplyBase.transferred.1 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html similarity index 65% rename from doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html index 4654187..d985499 100644 --- a/doc/coverage/coverage/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleMaxTotalSupplyBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleMaxTotalSupplyBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleMaxTotalSupplyBase.sol (source / functions) Hit Lines: 3737100.0 %3897.4 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1212100.0 %1392.3 %
11 100.0 %
@@ -88,103 +88,119 @@ 17 : : ITotalSupply public tokenContract; 18 : : uint256 public maxTotalSupply; 19 : : - 20 : 25 : constructor(address tokenContract_, uint256 maxTotalSupply_) { - 21 [ + + ]: 25 : require(tokenContract_ != address(0), RuleMaxTotalSupply_TokenAddressZeroNotAllowed()); - 22 : 24 : tokenContract = ITotalSupply(tokenContract_); - 23 : 24 : maxTotalSupply = maxTotalSupply_; - 24 : : } - 25 : : - 26 : 260 : function setMaxTotalSupply(uint256 newMaxTotalSupply) public onlyMaxTotalSupplyManager { - 27 : 258 : maxTotalSupply = newMaxTotalSupply; - 28 : 258 : emit MaxTotalSupplyUpdated(newMaxTotalSupply); - 29 : : } - 30 : : - 31 : 4 : function setTokenContract(address newTokenContract) public onlyMaxTotalSupplyManager { - 32 [ + + ]: 2 : require(newTokenContract != address(0), RuleMaxTotalSupply_TokenAddressZeroNotAllowed()); - 33 : 1 : tokenContract = ITotalSupply(newTokenContract); - 34 : 1 : emit TokenContractUpdated(newTokenContract); - 35 : : } - 36 : : - 37 : 271 : function _detectTransferRestriction( - 38 : : address from, - 39 : : address, - 40 : : /* to */ - 41 : : uint256 value - 42 : : ) - 43 : : internal - 44 : : view - 45 : : override - 46 : : returns (uint8) - 47 : : { - 48 [ + ]: 271 : if (from == address(0)) { - 49 : 268 : uint256 currentSupply = tokenContract.totalSupply(); - 50 [ + ]: 268 : if (currentSupply + value > maxTotalSupply) { - 51 : 176 : return CODE_MAX_TOTAL_SUPPLY_EXCEEDED; - 52 : : } - 53 : : } - 54 : 95 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 20 : : /*////////////////////////////////////////////////////////////// + 21 : : CONSTRUCTOR + 22 : : //////////////////////////////////////////////////////////////*/ + 23 : : + 24 : 25 : constructor(address tokenContract_, uint256 maxTotalSupply_) { + 25 [ + + ]: 25 : require(tokenContract_ != address(0), RuleMaxTotalSupply_TokenAddressZeroNotAllowed()); + 26 : 24 : tokenContract = ITotalSupply(tokenContract_); + 27 : 24 : maxTotalSupply = maxTotalSupply_; + 28 : : } + 29 : : + 30 : : /*////////////////////////////////////////////////////////////// + 31 : : EXTERNAL FUNCTIONS + 32 : : //////////////////////////////////////////////////////////////*/ + 33 : : + 34 : 2 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { + 35 : 2 : return restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED; + 36 : : } + 37 : : + 38 : : /*////////////////////////////////////////////////////////////// + 39 : : PUBLIC FUNCTIONS + 40 : : //////////////////////////////////////////////////////////////*/ + 41 : : + 42 : 260 : function setMaxTotalSupply(uint256 newMaxTotalSupply) public onlyMaxTotalSupplyManager { + 43 : 258 : maxTotalSupply = newMaxTotalSupply; + 44 : 258 : emit MaxTotalSupplyUpdated(newMaxTotalSupply); + 45 : : } + 46 : : + 47 : 4 : function setTokenContract(address newTokenContract) public onlyMaxTotalSupplyManager { + 48 [ + + ]: 2 : require(newTokenContract != address(0), RuleMaxTotalSupply_TokenAddressZeroNotAllowed()); + 49 : 1 : tokenContract = ITotalSupply(newTokenContract); + 50 : 1 : emit TokenContractUpdated(newTokenContract); + 51 : : } + 52 : : + 53 : 2 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + 54 : 2 : _transferred(from, to, value); 55 : : } 56 : : - 57 : 2 : function _detectTransferRestrictionFrom(address, address from, address to, uint256 value) - 58 : : internal - 59 : : view - 60 : : override - 61 : : returns (uint8) - 62 : : { - 63 : 2 : return _detectTransferRestriction(from, to, value); - 64 : : } - 65 : : - 66 : 2 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - 67 : 2 : _transferred(from, to, value); - 68 : : } - 69 : : - 70 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - 71 : 2 : _transferredFrom(spender, from, to, value); - 72 : : } - 73 : : - 74 : 2 : function _transferred(address from, address to, uint256 value) internal view virtual { - 75 : 2 : uint8 code = _detectTransferRestriction(from, to, value); - 76 [ + + ]: 2 : require( - 77 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 78 : : RuleMaxTotalSupply_InvalidTransfer(address(this), from, to, value, code) - 79 : : ); + 57 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + 58 : 2 : _transferredFrom(spender, from, to, value); + 59 : : } + 60 : : + 61 : 2 : function messageForTransferRestriction(uint8 restrictionCode) + 62 : : public + 63 : : pure + 64 : : override(IERC1404) + 65 : : returns (string memory) + 66 : : { + 67 [ + ]: 2 : if (restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED) { + 68 : 1 : return TEXT_MAX_TOTAL_SUPPLY_EXCEEDED; + 69 : : } + 70 : 1 : return TEXT_CODE_NOT_FOUND; + 71 : : } + 72 : : + 73 : : /*////////////////////////////////////////////////////////////// + 74 : : ACCESS CONTROL + 75 : : //////////////////////////////////////////////////////////////*/ + 76 : : + 77 : 260 : modifier onlyMaxTotalSupplyManager() { + 78 : 260 : _authorizeMaxTotalSupplyManager(); + 79 : : _; 80 : : } 81 : : - 82 : 2 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual { - 83 : 2 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 84 [ + + ]: 2 : require( - 85 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 86 : : RuleMaxTotalSupply_InvalidTransferFrom(address(this), spender, from, to, value, code) - 87 : : ); - 88 : : } - 89 : : - 90 : 2 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { - 91 : 2 : return restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED; - 92 : : } - 93 : : - 94 : 2 : function messageForTransferRestriction(uint8 restrictionCode) - 95 : : public - 96 : : pure - 97 : : override(IERC1404) - 98 : : returns (string memory) - 99 : : { - 100 [ + ]: 2 : if (restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED) { - 101 : 1 : return TEXT_MAX_TOTAL_SUPPLY_EXCEEDED; - 102 : : } - 103 : 1 : return TEXT_CODE_NOT_FOUND; - 104 : : } - 105 : : - 106 : : /*////////////////////////////////////////////////////////////// - 107 : : ACCESS CONTROL - 108 : : //////////////////////////////////////////////////////////////*/ - 109 : : - 110 : 260 : modifier onlyMaxTotalSupplyManager() { - 111 : 260 : _authorizeMaxTotalSupplyManager(); - 112 : : _; - 113 : : } - 114 : : - 115 : : function _authorizeMaxTotalSupplyManager() internal view virtual; - 116 : : } + 82 : 0 : function _authorizeMaxTotalSupplyManager() internal view virtual; + 83 : : + 84 : : /*////////////////////////////////////////////////////////////// + 85 : : INTERNAL FUNCTIONS + 86 : : //////////////////////////////////////////////////////////////*/ + 87 : : + 88 : 271 : function _detectTransferRestriction( + 89 : : address from, + 90 : : address, + 91 : : /* to */ + 92 : : uint256 value + 93 : : ) + 94 : : internal + 95 : : view + 96 : : override + 97 : : returns (uint8) + 98 : : { + 99 [ + ]: 271 : if (from == address(0)) { + 100 : 268 : uint256 currentSupply = tokenContract.totalSupply(); + 101 [ + ]: 268 : if (currentSupply + value > maxTotalSupply) { + 102 : 186 : return CODE_MAX_TOTAL_SUPPLY_EXCEEDED; + 103 : : } + 104 : : } + 105 : 85 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 106 : : } + 107 : : + 108 : 2 : function _detectTransferRestrictionFrom(address, address from, address to, uint256 value) + 109 : : internal + 110 : : view + 111 : : override + 112 : : returns (uint8) + 113 : : { + 114 : 2 : return _detectTransferRestriction(from, to, value); + 115 : : } + 116 : : + 117 : 2 : function _transferred(address from, address to, uint256 value) internal view virtual { + 118 : 2 : uint8 code = _detectTransferRestriction(from, to, value); + 119 [ + + ]: 2 : require( + 120 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 121 : : RuleMaxTotalSupply_InvalidTransfer(address(this), from, to, value, code) + 122 : : ); + 123 : : } + 124 : : + 125 : 2 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual { + 126 : 2 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 127 [ + + ]: 2 : require( + 128 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 129 : : RuleMaxTotalSupply_InvalidTransferFrom(address(this), spender, from, to, value, code) + 130 : : ); + 131 : : } + 132 : : } @@ -192,7 +208,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html similarity index 61% rename from doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html index fa20f29..fdef284 100644 --- a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSanctionsListBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSanctionsListBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,78 +53,82 @@ - +
Current view:top level - abstract/base - RuleSanctionsListBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSanctionsListBase.sol (source / functions) Hit Lines: 4747100.0 %4897.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1492.9 %
18 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsListBase.transferred.1RuleSanctionsListBase._authorizeSanctionListManager0
RuleSanctionsListBase.transferred.1 2
RuleSanctionsListBase._transferredFromRuleSanctionsListBase._transferredFrom 3
RuleSanctionsListBase.canReturnTransferRestrictionCodeRuleSanctionsListBase.canReturnTransferRestrictionCode 3
RuleSanctionsListBase.clearSanctionListOracleRuleSanctionsListBase.clearSanctionListOracle 3
RuleSanctionsListBase.onlySanctionListManagerRuleSanctionsListBase.onlySanctionListManager 3
RuleSanctionsListBase.messageForTransferRestrictionRuleSanctionsListBase.messageForTransferRestriction 4
RuleSanctionsListBase._detectTransferRestrictionFromRuleSanctionsListBase._detectTransferRestrictionFrom 16
RuleSanctionsListBase.setSanctionListOracleRuleSanctionsListBase.setSanctionListOracle 17
RuleSanctionsListBase._setSanctionListOracleRuleSanctionsListBase._setSanctionListOracle 37
RuleSanctionsListBase.transferred.0RuleSanctionsListBase.transferred.0 43
RuleSanctionsListBase.constructorRuleSanctionsListBase.constructor 46
RuleSanctionsListBase._transferredRuleSanctionsListBase._transferred 47
RuleSanctionsListBase._detectTransferRestrictionRuleSanctionsListBase._detectTransferRestriction 84

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func.html similarity index 61% rename from doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func.html index 142069e..e7987cd 100644 --- a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSanctionsListBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSanctionsListBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,78 +53,82 @@ - +
Current view:top level - abstract/base - RuleSanctionsListBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSanctionsListBase.sol (source / functions) Hit Lines: 4747100.0 %4897.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1492.9 %
18 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsListBase._detectTransferRestrictionRuleSanctionsListBase._authorizeSanctionListManager0
RuleSanctionsListBase._detectTransferRestriction 84
RuleSanctionsListBase._detectTransferRestrictionFromRuleSanctionsListBase._detectTransferRestrictionFrom 16
RuleSanctionsListBase._setSanctionListOracleRuleSanctionsListBase._setSanctionListOracle 37
RuleSanctionsListBase._transferredRuleSanctionsListBase._transferred 47
RuleSanctionsListBase._transferredFromRuleSanctionsListBase._transferredFrom 3
RuleSanctionsListBase.canReturnTransferRestrictionCodeRuleSanctionsListBase.canReturnTransferRestrictionCode 3
RuleSanctionsListBase.clearSanctionListOracleRuleSanctionsListBase.clearSanctionListOracle 3
RuleSanctionsListBase.constructorRuleSanctionsListBase.constructor 46
RuleSanctionsListBase.messageForTransferRestrictionRuleSanctionsListBase.messageForTransferRestriction 4
RuleSanctionsListBase.onlySanctionListManagerRuleSanctionsListBase.onlySanctionListManager 3
RuleSanctionsListBase.setSanctionListOracleRuleSanctionsListBase.setSanctionListOracle 17
RuleSanctionsListBase.transferred.0RuleSanctionsListBase.transferred.0 43
RuleSanctionsListBase.transferred.1RuleSanctionsListBase.transferred.1 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.gcov.html similarity index 69% rename from doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.gcov.html index 7ddbdd5..4696c16 100644 --- a/doc/coverage/coverage/abstract/base/RuleSanctionsListBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSanctionsListBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSanctionsListBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSanctionsListBase.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleSanctionsListBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSanctionsListBase.sol (source / functions) Hit Lines: 4747100.0 %4897.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1313100.0 %1492.9 %
18 100.0 %
@@ -88,120 +88,136 @@ 17 : : abstract contract RuleSanctionsListBase is MetaTxModuleStandalone, RuleNFTAdapter, RuleSanctionsListInvariantStorage { 18 : : ISanctionsList public sanctionsList; 19 : : - 20 : 46 : constructor(address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) - 21 : : MetaTxModuleStandalone(forwarderIrrevocable) - 22 : : { - 23 [ + ]: 45 : if (address(sanctionContractOracle_) != address(0)) { - 24 : 20 : _setSanctionListOracle(sanctionContractOracle_); - 25 : : } - 26 : : } - 27 : : - 28 : 84 : function _detectTransferRestriction( - 29 : : address from, - 30 : : address to, - 31 : : uint256 /* value */ - 32 : : ) - 33 : : internal - 34 : : view - 35 : : override - 36 : : returns (uint8) - 37 : : { - 38 [ + ]: 84 : if (address(sanctionsList) != address(0)) { - 39 [ + + ]: 77 : if (sanctionsList.isSanctioned(from)) { - 40 : 10 : return CODE_ADDRESS_FROM_IS_SANCTIONED; - 41 [ + ]: 67 : } else if (sanctionsList.isSanctioned(to)) { - 42 : 12 : return CODE_ADDRESS_TO_IS_SANCTIONED; - 43 : : } - 44 : : } - 45 : 62 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); - 46 : : } - 47 : : - 48 : 16 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 49 : : internal - 50 : : view - 51 : : virtual - 52 : : override - 53 : : returns (uint8) - 54 : : { - 55 [ + ]: 16 : if (address(sanctionsList) != address(0)) { - 56 [ + ]: 15 : if (sanctionsList.isSanctioned(spender)) { - 57 : 6 : return CODE_ADDRESS_SPENDER_IS_SANCTIONED; - 58 : : } - 59 : 9 : return _detectTransferRestriction(from, to, value); - 60 : : } - 61 : 1 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); - 62 : : } - 63 : : - 64 : 3 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { - 65 : 3 : return restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED || restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED - 66 : 1 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED; - 67 : : } - 68 : : - 69 : 4 : function messageForTransferRestriction(uint8 restrictionCode) - 70 : : public - 71 : : pure - 72 : : override(IERC1404) - 73 : : returns (string memory) - 74 : : { - 75 [ + + ]: 4 : if (restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED) { - 76 : 1 : return TEXT_ADDRESS_FROM_IS_SANCTIONED; - 77 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED) { - 78 : 1 : return TEXT_ADDRESS_TO_IS_SANCTIONED; - 79 [ + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED) { - 80 : 1 : return TEXT_ADDRESS_SPENDER_IS_SANCTIONED; - 81 : : } - 82 : 1 : return TEXT_CODE_NOT_FOUND; - 83 : : } - 84 : : - 85 : 17 : function setSanctionListOracle(ISanctionsList sanctionContractOracle_) public virtual onlySanctionListManager { - 86 [ + + ]: 15 : require(address(sanctionContractOracle_) != address(0), RuleSanctionsList_OracleAddressZeroNotAllowed()); - 87 : 14 : _setSanctionListOracle(sanctionContractOracle_); - 88 : : } - 89 : : - 90 : 3 : function clearSanctionListOracle() public virtual onlySanctionListManager { - 91 : 3 : _setSanctionListOracle(ISanctionsList(address(0))); - 92 : : } - 93 : : - 94 : 43 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - 95 : 43 : _transferred(from, to, value); - 96 : : } - 97 : : - 98 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - 99 : 2 : _transferredFrom(spender, from, to, value); - 100 : : } - 101 : : - 102 : 47 : function _transferred(address from, address to, uint256 value) internal view virtual override { - 103 : 47 : uint8 code = _detectTransferRestriction(from, to, value); - 104 [ + + ]: 47 : require( - 105 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 106 : : RuleSanctionsList_InvalidTransfer(address(this), from, to, value, code) - 107 : : ); - 108 : : } - 109 : : - 110 : 3 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 111 : 3 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 112 [ + + ]: 3 : require( - 113 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 114 : : RuleSanctionsList_InvalidTransferFrom(address(this), spender, from, to, value, code) - 115 : : ); - 116 : : } - 117 : : - 118 : 37 : function _setSanctionListOracle(ISanctionsList sanctionContractOracle_) internal virtual { - 119 : 37 : sanctionsList = sanctionContractOracle_; - 120 : 37 : emit SetSanctionListOracle(sanctionContractOracle_); - 121 : : } - 122 : : - 123 : : /*////////////////////////////////////////////////////////////// - 124 : : ACCESS CONTROL - 125 : : //////////////////////////////////////////////////////////////*/ - 126 : : - 127 : 3 : modifier onlySanctionListManager() { - 128 : 3 : _authorizeSanctionListManager(); - 129 : : _; - 130 : : } - 131 : : - 132 : : function _authorizeSanctionListManager() internal view virtual; - 133 : : } + 20 : : /*////////////////////////////////////////////////////////////// + 21 : : CONSTRUCTOR + 22 : : //////////////////////////////////////////////////////////////*/ + 23 : : + 24 : 46 : constructor(address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) + 25 : : MetaTxModuleStandalone(forwarderIrrevocable) + 26 : : { + 27 [ + ]: 45 : if (address(sanctionContractOracle_) != address(0)) { + 28 : 20 : _setSanctionListOracle(sanctionContractOracle_); + 29 : : } + 30 : : } + 31 : : + 32 : : /*////////////////////////////////////////////////////////////// + 33 : : EXTERNAL FUNCTIONS + 34 : : //////////////////////////////////////////////////////////////*/ + 35 : : + 36 : 3 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { + 37 : 3 : return restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED || restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED + 38 : 1 : || restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED; + 39 : : } + 40 : : + 41 : : /*////////////////////////////////////////////////////////////// + 42 : : PUBLIC FUNCTIONS + 43 : : //////////////////////////////////////////////////////////////*/ + 44 : : + 45 : 17 : function setSanctionListOracle(ISanctionsList sanctionContractOracle_) public virtual onlySanctionListManager { + 46 [ + + ]: 15 : require(address(sanctionContractOracle_) != address(0), RuleSanctionsList_OracleAddressZeroNotAllowed()); + 47 : 14 : _setSanctionListOracle(sanctionContractOracle_); + 48 : : } + 49 : : + 50 : 3 : function clearSanctionListOracle() public virtual onlySanctionListManager { + 51 : 3 : _setSanctionListOracle(ISanctionsList(address(0))); + 52 : : } + 53 : : + 54 : 43 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + 55 : 43 : _transferred(from, to, value); + 56 : : } + 57 : : + 58 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + 59 : 2 : _transferredFrom(spender, from, to, value); + 60 : : } + 61 : : + 62 : 4 : function messageForTransferRestriction(uint8 restrictionCode) + 63 : : public + 64 : : pure + 65 : : override(IERC1404) + 66 : : returns (string memory) + 67 : : { + 68 [ + + ]: 4 : if (restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED) { + 69 : 1 : return TEXT_ADDRESS_FROM_IS_SANCTIONED; + 70 [ + + ]: 3 : } else if (restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED) { + 71 : 1 : return TEXT_ADDRESS_TO_IS_SANCTIONED; + 72 [ + ]: 2 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED) { + 73 : 1 : return TEXT_ADDRESS_SPENDER_IS_SANCTIONED; + 74 : : } + 75 : 1 : return TEXT_CODE_NOT_FOUND; + 76 : : } + 77 : : + 78 : : /*////////////////////////////////////////////////////////////// + 79 : : ACCESS CONTROL + 80 : : //////////////////////////////////////////////////////////////*/ + 81 : : + 82 : 3 : modifier onlySanctionListManager() { + 83 : 3 : _authorizeSanctionListManager(); + 84 : : _; + 85 : : } + 86 : : + 87 : 0 : function _authorizeSanctionListManager() internal view virtual; + 88 : : + 89 : : /*////////////////////////////////////////////////////////////// + 90 : : INTERNAL FUNCTIONS + 91 : : //////////////////////////////////////////////////////////////*/ + 92 : : + 93 : 84 : function _detectTransferRestriction( + 94 : : address from, + 95 : : address to, + 96 : : uint256 /* value */ + 97 : : ) + 98 : : internal + 99 : : view + 100 : : override + 101 : : returns (uint8) + 102 : : { + 103 [ + ]: 84 : if (address(sanctionsList) != address(0)) { + 104 [ + + ]: 77 : if (sanctionsList.isSanctioned(from)) { + 105 : 10 : return CODE_ADDRESS_FROM_IS_SANCTIONED; + 106 [ + ]: 67 : } else if (sanctionsList.isSanctioned(to)) { + 107 : 12 : return CODE_ADDRESS_TO_IS_SANCTIONED; + 108 : : } + 109 : : } + 110 : 62 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 111 : : } + 112 : : + 113 : 16 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 114 : : internal + 115 : : view + 116 : : virtual + 117 : : override + 118 : : returns (uint8) + 119 : : { + 120 [ + ]: 16 : if (address(sanctionsList) != address(0)) { + 121 [ + ]: 15 : if (sanctionsList.isSanctioned(spender)) { + 122 : 6 : return CODE_ADDRESS_SPENDER_IS_SANCTIONED; + 123 : : } + 124 : 9 : return _detectTransferRestriction(from, to, value); + 125 : : } + 126 : 1 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 127 : : } + 128 : : + 129 : 47 : function _transferred(address from, address to, uint256 value) internal view virtual override { + 130 : 47 : uint8 code = _detectTransferRestriction(from, to, value); + 131 [ + + ]: 47 : require( + 132 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 133 : : RuleSanctionsList_InvalidTransfer(address(this), from, to, value, code) + 134 : : ); + 135 : : } + 136 : : + 137 : 3 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 138 : 3 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 139 [ + + ]: 3 : require( + 140 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 141 : : RuleSanctionsList_InvalidTransferFrom(address(this), spender, from, to, value, code) + 142 : : ); + 143 : : } + 144 : : + 145 : 37 : function _setSanctionListOracle(ISanctionsList sanctionContractOracle_) internal virtual { + 146 : 37 : sanctionsList = sanctionContractOracle_; + 147 : 37 : emit SetSanctionListOracle(sanctionContractOracle_); + 148 : : } + 149 : : } @@ -209,7 +225,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html index 314e705..0bbdfbe 100644 --- a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSpenderWhitelistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,58 +53,58 @@ - +
Current view:top level - abstract/base - RuleSpenderWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSpenderWhitelistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 84 100.0 %
- - + + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelistBase.transferred.0RuleSpenderWhitelistBase.transferred.0 1
RuleSpenderWhitelistBase.canReturnTransferRestrictionCodeRuleSpenderWhitelistBase.canReturnTransferRestrictionCode 2
RuleSpenderWhitelistBase.messageForTransferRestrictionRuleSpenderWhitelistBase.messageForTransferRestriction 2
RuleSpenderWhitelistBase.transferred.1RuleSpenderWhitelistBase.transferred.1 2
RuleSpenderWhitelistBase._transferredRuleSpenderWhitelistBase._transferred 3
RuleSpenderWhitelistBase._detectTransferRestrictionRuleSpenderWhitelistBase._detectTransferRestriction 4
RuleSpenderWhitelistBase._transferredFromRuleSpenderWhitelistBase._transferredFrom 7
RuleSpenderWhitelistBase._detectTransferRestrictionFromRuleSpenderWhitelistBase._detectTransferRestrictionFrom 13

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func.html similarity index 67% rename from doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func.html index e20e522..7bf8a35 100644 --- a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSpenderWhitelistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,58 +53,58 @@ - +
Current view:top level - abstract/base - RuleSpenderWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSpenderWhitelistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 84 100.0 %
- - + + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelistBase._detectTransferRestrictionRuleSpenderWhitelistBase._detectTransferRestriction 4
RuleSpenderWhitelistBase._detectTransferRestrictionFromRuleSpenderWhitelistBase._detectTransferRestrictionFrom 13
RuleSpenderWhitelistBase._transferredRuleSpenderWhitelistBase._transferred 3
RuleSpenderWhitelistBase._transferredFromRuleSpenderWhitelistBase._transferredFrom 7
RuleSpenderWhitelistBase.canReturnTransferRestrictionCodeRuleSpenderWhitelistBase.canReturnTransferRestrictionCode 2
RuleSpenderWhitelistBase.messageForTransferRestrictionRuleSpenderWhitelistBase.messageForTransferRestriction 2
RuleSpenderWhitelistBase.transferred.0RuleSpenderWhitelistBase.transferred.0 1
RuleSpenderWhitelistBase.transferred.1RuleSpenderWhitelistBase.transferred.1 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html similarity index 78% rename from doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html index 6f88cfd..c081701 100644 --- a/doc/coverage/coverage/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleSpenderWhitelistBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleSpenderWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleSpenderWhitelistBase.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 84 100.0 %
@@ -85,62 +85,78 @@ 14 : : * @dev Direct transfers (`transferred(from,to,value)`) are intentionally no-op. 15 : : */ 16 : : abstract contract RuleSpenderWhitelistBase is RuleAddressSet, RuleNFTAdapter, RuleSpenderWhitelistInvariantStorage { - 17 : : constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} - 18 : : - 19 : 4 : function _detectTransferRestriction(address, address, uint256) internal pure virtual override returns (uint8) { - 20 : 4 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 21 : : } + 17 : : /*////////////////////////////////////////////////////////////// + 18 : : CONSTRUCTOR + 19 : : //////////////////////////////////////////////////////////////*/ + 20 : : + 21 : : constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} 22 : : - 23 : 13 : function _detectTransferRestrictionFrom(address spender, address, address, uint256) - 24 : : internal - 25 : : view - 26 : : virtual - 27 : : override - 28 : : returns (uint8) - 29 : : { - 30 [ + ]: 13 : if (spender != address(0) && !_isAddressListed(spender)) { - 31 : 5 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - 32 : : } - 33 : 8 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 34 : : } - 35 : : - 36 : 2 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { - 37 : 2 : return restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - 38 : : } + 23 : : /*////////////////////////////////////////////////////////////// + 24 : : EXTERNAL FUNCTIONS + 25 : : //////////////////////////////////////////////////////////////*/ + 26 : : + 27 : 2 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { + 28 : 2 : return restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + 29 : : } + 30 : : + 31 : : /*////////////////////////////////////////////////////////////// + 32 : : PUBLIC FUNCTIONS + 33 : : //////////////////////////////////////////////////////////////*/ + 34 : : + 35 : : /** + 36 : : * @dev Regular transfers are always accepted by this rule. + 37 : : */ + 38 : 1 : function transferred(address, address, uint256) public view override(IERC3643IComplianceContract) {} 39 : : - 40 : 2 : function messageForTransferRestriction(uint8 restrictionCode) - 41 : : public - 42 : : pure - 43 : : override(IERC1404) - 44 : : returns (string memory) - 45 : : { - 46 [ + ]: 2 : if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED) { - 47 : 1 : return TEXT_ADDRESS_SPENDER_NOT_WHITELISTED; - 48 : : } - 49 : 1 : return TEXT_CODE_NOT_FOUND; - 50 : : } - 51 : : - 52 : : /** - 53 : : * @dev Regular transfers are always accepted by this rule. - 54 : : */ - 55 : 1 : function transferred(address, address, uint256) public view override(IERC3643IComplianceContract) {} - 56 : : - 57 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - 58 : 2 : _transferredFrom(spender, from, to, value); - 59 : : } - 60 : : - 61 : 3 : function _transferred(address, address, uint256) internal view virtual override { - 62 : : // no-op: regular transfers are intentionally ignored by this rule - 63 : : } - 64 : : - 65 : 7 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 66 : 7 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 67 [ + + ]: 7 : require( - 68 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - 69 : : RuleSpenderWhitelist_InvalidTransferFrom(address(this), spender, from, to, value, code) - 70 : : ); - 71 : : } - 72 : : } + 40 : 2 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + 41 : 2 : _transferredFrom(spender, from, to, value); + 42 : : } + 43 : : + 44 : 2 : function messageForTransferRestriction(uint8 restrictionCode) + 45 : : public + 46 : : pure + 47 : : override(IERC1404) + 48 : : returns (string memory) + 49 : : { + 50 [ + ]: 2 : if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED) { + 51 : 1 : return TEXT_ADDRESS_SPENDER_NOT_WHITELISTED; + 52 : : } + 53 : 1 : return TEXT_CODE_NOT_FOUND; + 54 : : } + 55 : : + 56 : : /*////////////////////////////////////////////////////////////// + 57 : : INTERNAL FUNCTIONS + 58 : : //////////////////////////////////////////////////////////////*/ + 59 : : + 60 : 4 : function _detectTransferRestriction(address, address, uint256) internal pure virtual override returns (uint8) { + 61 : 4 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 62 : : } + 63 : : + 64 : 13 : function _detectTransferRestrictionFrom(address spender, address, address, uint256) + 65 : : internal + 66 : : view + 67 : : virtual + 68 : : override + 69 : : returns (uint8) + 70 : : { + 71 [ + ]: 13 : if (spender != address(0) && !_isAddressListed(spender)) { + 72 : 5 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + 73 : : } + 74 : 8 : return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 75 : : } + 76 : : + 77 : 3 : function _transferred(address, address, uint256) internal view virtual override { + 78 : : // no-op: regular transfers are intentionally ignored by this rule + 79 : : } + 80 : : + 81 : 7 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 82 : 7 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 83 [ + + ]: 7 : require( + 84 : : code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + 85 : : RuleSpenderWhitelist_InvalidTransferFrom(address(this), spender, from, to, value, code) + 86 : : ); + 87 : : } + 88 : : } @@ -148,7 +164,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func-sort-c.html similarity index 56% rename from doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func-sort-c.html index 7c9168d..af592e2 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,80 +31,84 @@ - - - + + + - + - - + + - - + + - +
Current view:top level - abstract/base - RuleWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistBase.sol (source / functions) Hitlcov.info Lines:2323100.0 %262796.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %988.9 %
Branches:4455 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistBase._setCheckSpenderRuleWhitelistBase._authorizeCheckSpenderManager0
RuleWhitelistBase._setCheckSpender 2
RuleWhitelistBase.isVerifiedRuleWhitelistBase.isVerified 2
RuleWhitelistBase.onlyCheckSpenderManagerRuleWhitelistBase.onlyCheckSpenderManager 3
RuleWhitelistBase.setCheckSpenderRuleWhitelistBase.setCheckSpender 3
RuleWhitelistBase._detectTransferRestrictionFromRuleWhitelistBase._detectTransferRestrictionFrom 18
RuleWhitelistBase.supportsInterfaceRuleWhitelistBase.supportsInterface 27
RuleWhitelistBase._detectTransferRestrictionRuleWhitelistBase._detectTransferRestriction 53
RuleWhitelistBase.constructor159RuleWhitelistBase.constructor163

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func.html similarity index 56% rename from doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func.html index 635f9f5..b092a21 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,80 +31,84 @@ - - - + + + - + - - + + - - + + - +
Current view:top level - abstract/base - RuleWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistBase.sol (source / functions) Hitlcov.info Lines:2323100.0 %262796.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %988.9 %
Branches:4455 100.0 %
- - + + - + + + + + - + - + - - + + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistBase._detectTransferRestrictionRuleWhitelistBase._authorizeCheckSpenderManager0
RuleWhitelistBase._detectTransferRestriction 53
RuleWhitelistBase._detectTransferRestrictionFromRuleWhitelistBase._detectTransferRestrictionFrom 18
RuleWhitelistBase._setCheckSpenderRuleWhitelistBase._setCheckSpender 2
RuleWhitelistBase.constructor159RuleWhitelistBase.constructor163
RuleWhitelistBase.isVerifiedRuleWhitelistBase.isVerified 2
RuleWhitelistBase.onlyCheckSpenderManagerRuleWhitelistBase.onlyCheckSpenderManager 3
RuleWhitelistBase.setCheckSpenderRuleWhitelistBase.setCheckSpender 3
RuleWhitelistBase.supportsInterfaceRuleWhitelistBase.supportsInterface 27

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.gcov.html similarity index 72% rename from doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.gcov.html index d2383c6..58b5f4c 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistBase.sol + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - + + - - + + - +
Current view:top level - abstract/base - RuleWhitelistBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistBase.sol (source / functions) Hitlcov.info Lines:2323100.0 %262796.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %988.9 %
Branches:4455 100.0 %
@@ -82,76 +82,94 @@ 11 : : * @notice Core whitelist logic without access-control policy. 12 : : */ 13 : : abstract contract RuleWhitelistBase is RuleAddressSet, RuleWhitelistShared, IIdentityRegistryVerified { - 14 : 159 : constructor(address forwarderIrrevocable, bool checkSpender_) RuleAddressSet(forwarderIrrevocable) { - 15 : 159 : checkSpender = checkSpender_; - 16 : : } + 14 : : /*////////////////////////////////////////////////////////////// + 15 : : CONSTRUCTOR + 16 : : //////////////////////////////////////////////////////////////*/ 17 : : - 18 : 53 : function _detectTransferRestriction( - 19 : : address from, - 20 : : address to, - 21 : : uint256 /* value */ - 22 : : ) - 23 : : internal - 24 : : view - 25 : : virtual - 26 : : override - 27 : : returns (uint8) - 28 : : { - 29 [ + + ]: 53 : if (!isAddressListed(from)) { - 30 : 13 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; - 31 [ + ]: 40 : } else if (!isAddressListed(to)) { - 32 : 10 : return CODE_ADDRESS_TO_NOT_WHITELISTED; - 33 : : } - 34 : 30 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 18 : 163 : constructor(address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + 19 : : RuleAddressSet(forwarderIrrevocable) + 20 : : { + 21 : 163 : checkSpender = checkSpender_; + 22 [ + ]: 2 : if (allowMintBurn) { + 23 : 2 : _addAddress(address(0)); + 24 : 2 : emit AddAddress(address(0)); + 25 : : } + 26 : : } + 27 : : + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : PUBLIC FUNCTIONS + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : 3 : function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { + 33 : 2 : _setCheckSpender(value); + 34 : 2 : emit CheckSpenderUpdated(value); 35 : : } 36 : : - 37 : 18 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 38 : : internal + 37 : 2 : function isVerified(address targetAddress) + 38 : : public 39 : : view 40 : : virtual - 41 : : override - 42 : : returns (uint8) + 41 : : override(IIdentityRegistryVerified) + 42 : : returns (bool isListed) 43 : : { - 44 [ + ]: 18 : if (checkSpender && !isAddressListed(spender)) { - 45 : 8 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - 46 : : } - 47 : 10 : return _detectTransferRestriction(from, to, value); - 48 : : } - 49 : : - 50 : 2 : function isVerified(address targetAddress) - 51 : : public - 52 : : view - 53 : : virtual - 54 : : override(IIdentityRegistryVerified) - 55 : : returns (bool isListed) - 56 : : { - 57 : 2 : isListed = _isAddressListed(targetAddress); + 44 : 2 : isListed = _isAddressListed(targetAddress); + 45 : : } + 46 : : + 47 : 27 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { + 48 : 27 : return RuleTransferValidation.supportsInterface(interfaceId); + 49 : : } + 50 : : + 51 : : /*////////////////////////////////////////////////////////////// + 52 : : ACCESS CONTROL + 53 : : //////////////////////////////////////////////////////////////*/ + 54 : : + 55 : 3 : modifier onlyCheckSpenderManager() { + 56 : 3 : _authorizeCheckSpenderManager(); + 57 : : _; 58 : : } 59 : : - 60 : 3 : function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { - 61 : 2 : _setCheckSpender(value); - 62 : 2 : emit CheckSpenderUpdated(value); - 63 : : } - 64 : : - 65 : 2 : function _setCheckSpender(bool value) internal virtual { - 66 : 2 : checkSpender = value; - 67 : : } - 68 : : - 69 : 27 : function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { - 70 : 27 : return RuleTransferValidation.supportsInterface(interfaceId); - 71 : : } - 72 : : - 73 : : /*////////////////////////////////////////////////////////////// - 74 : : ACCESS CONTROL - 75 : : //////////////////////////////////////////////////////////////*/ - 76 : : - 77 : 3 : modifier onlyCheckSpenderManager() { - 78 : 3 : _authorizeCheckSpenderManager(); - 79 : : _; - 80 : : } - 81 : : - 82 : : function _authorizeCheckSpenderManager() internal view virtual; - 83 : : } + 60 : 0 : function _authorizeCheckSpenderManager() internal view virtual; + 61 : : + 62 : : /*////////////////////////////////////////////////////////////// + 63 : : INTERNAL FUNCTIONS + 64 : : //////////////////////////////////////////////////////////////*/ + 65 : : + 66 : 53 : function _detectTransferRestriction( + 67 : : address from, + 68 : : address to, + 69 : : uint256 /* value */ + 70 : : ) + 71 : : internal + 72 : : view + 73 : : virtual + 74 : : override + 75 : : returns (uint8) + 76 : : { + 77 [ + + ]: 53 : if (!isAddressListed(from)) { + 78 : 13 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; + 79 [ + ]: 40 : } else if (!isAddressListed(to)) { + 80 : 10 : return CODE_ADDRESS_TO_NOT_WHITELISTED; + 81 : : } + 82 : 30 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 83 : : } + 84 : : + 85 : 18 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 86 : : internal + 87 : : view + 88 : : virtual + 89 : : override + 90 : : returns (uint8) + 91 : : { + 92 [ + ]: 18 : if (checkSpender && !isAddressListed(spender)) { + 93 : 8 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + 94 : : } + 95 : 10 : return _detectTransferRestriction(from, to, value); + 96 : : } + 97 : : + 98 : 2 : function _setCheckSpender(bool value) internal virtual { + 99 : 2 : checkSpender = value; + 100 : : } + 101 : : } @@ -159,7 +177,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html index d3a41dc..a659423 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistWrapperBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,82 +53,86 @@ - +
Current view:top level - abstract/base - RuleWhitelistWrapperBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistWrapperBase.sol (source / functions) Hit Lines: 6767100.0 %6898.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1414100.0 %1593.3 %
14 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapperBase._transferred.1RuleWhitelistWrapperBase._authorizeCheckSpenderManager0
RuleWhitelistWrapperBase._transferred.1 1
RuleWhitelistWrapperBase._msgDataRuleWhitelistWrapperBase._msgData 2
RuleWhitelistWrapperBase._setCheckSpenderRuleWhitelistWrapperBase._setCheckSpender 3
RuleWhitelistWrapperBase.isVerifiedRuleWhitelistWrapperBase.isVerified 4
RuleWhitelistWrapperBase.onlyCheckSpenderManagerRuleWhitelistWrapperBase.onlyCheckSpenderManager 4
RuleWhitelistWrapperBase.setCheckSpenderRuleWhitelistWrapperBase.setCheckSpender 4
RuleWhitelistWrapperBase._transferred.0RuleWhitelistWrapperBase._transferred.0 13
RuleWhitelistWrapperBase._detectTransferRestrictionFromRuleWhitelistWrapperBase._detectTransferRestrictionFrom 20
RuleWhitelistWrapperBase._detectTransferRestrictionRuleWhitelistWrapperBase._detectTransferRestriction 34
RuleWhitelistWrapperBase.constructorRuleWhitelistWrapperBase.constructor 44
RuleWhitelistWrapperBase._detectTransferRestrictionForTargets57RuleWhitelistWrapperBase.supportsInterface46
RuleWhitelistWrapperBase.supportsInterface62RuleWhitelistWrapperBase._detectTransferRestrictionForTargets57
RuleWhitelistWrapperBase._msgSenderRuleWhitelistWrapperBase._msgSender 145
RuleWhitelistWrapperBase._contextSuffixLengthRuleWhitelistWrapperBase._contextSuffixLength 147

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func.html similarity index 60% rename from doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func.html index 31a047e..cecc2cd 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistWrapperBase.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,82 +53,86 @@ - +
Current view:top level - abstract/base - RuleWhitelistWrapperBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistWrapperBase.sol (source / functions) Hit Lines: 6767100.0 %6898.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1414100.0 %1593.3 %
14 100.0 %
- - + + - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapperBase._contextSuffixLengthRuleWhitelistWrapperBase._authorizeCheckSpenderManager0
RuleWhitelistWrapperBase._contextSuffixLength 147
RuleWhitelistWrapperBase._detectTransferRestrictionRuleWhitelistWrapperBase._detectTransferRestriction 34
RuleWhitelistWrapperBase._detectTransferRestrictionForTargetsRuleWhitelistWrapperBase._detectTransferRestrictionForTargets 57
RuleWhitelistWrapperBase._detectTransferRestrictionFromRuleWhitelistWrapperBase._detectTransferRestrictionFrom 20
RuleWhitelistWrapperBase._msgDataRuleWhitelistWrapperBase._msgData 2
RuleWhitelistWrapperBase._msgSenderRuleWhitelistWrapperBase._msgSender 145
RuleWhitelistWrapperBase._setCheckSpenderRuleWhitelistWrapperBase._setCheckSpender 3
RuleWhitelistWrapperBase._transferred.0RuleWhitelistWrapperBase._transferred.0 13
RuleWhitelistWrapperBase._transferred.1RuleWhitelistWrapperBase._transferred.1 1
RuleWhitelistWrapperBase.constructorRuleWhitelistWrapperBase.constructor 44
RuleWhitelistWrapperBase.isVerifiedRuleWhitelistWrapperBase.isVerified 4
RuleWhitelistWrapperBase.onlyCheckSpenderManagerRuleWhitelistWrapperBase.onlyCheckSpenderManager 4
RuleWhitelistWrapperBase.setCheckSpenderRuleWhitelistWrapperBase.setCheckSpender 4
RuleWhitelistWrapperBase.supportsInterface62RuleWhitelistWrapperBase.supportsInterface46

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html similarity index 72% rename from doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html index 25e8229..908f101 100644 --- a/doc/coverage/coverage/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base/RuleWhitelistWrapperBase.sol - + LCOV - lcov.info - src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/base - RuleWhitelistWrapperBase.sol (source / functions)top level - src/rules/validation/abstract/base - RuleWhitelistWrapperBase.sol (source / functions) Hit Lines: 6767100.0 %6898.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1414100.0 %1593.3 %
14 100.0 %
@@ -73,243 +73,241 @@ 2 : : 3 : : pragma solidity ^0.8.20; 4 : : - 5 : : /* ==== OpenZeppelin === */ - 6 : : import {AccessControl} from "OZ/access/AccessControl.sol"; - 7 : : /* ==== Abstract contracts === */ - 8 : : import {MetaTxModuleStandalone, ERC2771Context} from "../../../../modules/MetaTxModuleStandalone.sol"; - 9 : : import {Context} from "OZ/utils/Context.sol"; - 10 : : import {RuleWhitelistShared} from "../core/RuleWhitelistShared.sol"; - 11 : : import {RuleTransferValidation} from "../core/RuleTransferValidation.sol"; - 12 : : /* ==== RuleEngine === */ - 13 : : import {RulesManagementModule} from "RuleEngine/modules/RulesManagementModule.sol"; - 14 : : /* ==== Interfaces === */ - 15 : : import {IAddressList} from "../../../interfaces/IAddressList.sol"; - 16 : : import {IIdentityRegistryVerified} from "../../../interfaces/IIdentityRegistry.sol"; - 17 : : - 18 : : /** - 19 : : * @title Wrapper to call several different whitelist rules (base) - 20 : : * @dev Child rules must implement {IAddressList}. - 21 : : */ - 22 : : abstract contract RuleWhitelistWrapperBase is - 23 : : RulesManagementModule, - 24 : : MetaTxModuleStandalone, - 25 : : RuleWhitelistShared, - 26 : : IIdentityRegistryVerified - 27 : : { - 28 : : /*////////////////////////////////////////////////////////////// - 29 : : CONSTRUCTOR - 30 : : //////////////////////////////////////////////////////////////*/ - 31 : : /** - 32 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support - 33 : : */ - 34 : 44 : constructor(address forwarderIrrevocable, bool checkSpender_) MetaTxModuleStandalone(forwarderIrrevocable) { - 35 : 44 : checkSpender = checkSpender_; - 36 : : } - 37 : : - 38 : : /* ============ View Functions ============ */ - 39 : : /** - 40 : : * @notice Go through all the whitelist rules to know if a restriction exists on the transfer - 41 : : * @param from the origin address - 42 : : * @param to the destination address - 43 : : * @return The restricion code or REJECTED_CODE_BASE.TRANSFER_OK - 44 : : * - 45 : : */ - 46 : 34 : function _detectTransferRestriction( - 47 : : address from, - 48 : : address to, - 49 : : uint256 /* value */ - 50 : : ) - 51 : : internal - 52 : : view - 53 : : virtual - 54 : : override - 55 : : returns (uint8) - 56 : : { - 57 : 34 : address[] memory targetAddress = new address[](2); - 58 : 34 : targetAddress[0] = from; - 59 : 34 : targetAddress[1] = to; - 60 : : - 61 : 34 : bool[] memory result = _detectTransferRestrictionForTargets(targetAddress); - 62 [ + + ]: 34 : if (!result[0]) { - 63 : 13 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; - 64 [ + + ]: 21 : } else if (!result[1]) { - 65 : 8 : return CODE_ADDRESS_TO_NOT_WHITELISTED; - 66 : : } else { - 67 : 13 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); - 68 : : } - 69 : : } - 70 : : - 71 : 20 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 72 : : internal - 73 : : view - 74 : : virtual - 75 : : override - 76 : : returns (uint8) - 77 : : { - 78 [ + ]: 20 : if (!checkSpender) { - 79 : 1 : return _detectTransferRestriction(from, to, value); - 80 : : } - 81 : : - 82 : 19 : address[] memory targetAddress = new address[](3); - 83 : 19 : targetAddress[0] = from; - 84 : 19 : targetAddress[1] = to; - 85 : 19 : targetAddress[2] = spender; - 86 : : - 87 : 19 : bool[] memory result = _detectTransferRestrictionForTargets(targetAddress); - 88 : : - 89 [ + + ]: 19 : if (!result[0]) { - 90 : 1 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; - 91 [ + + ]: 18 : } else if (!result[1]) { - 92 : 1 : return CODE_ADDRESS_TO_NOT_WHITELISTED; - 93 [ + + ]: 17 : } else if (!result[2]) { - 94 : 8 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - 95 : : } else { - 96 : 9 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); - 97 : : } - 98 : : } - 99 : : - 100 : : // ERC-7943 tokenId overloads are provided by {RuleNFTAdapter} via RuleWhitelistShared. - 101 : : - 102 : 62 : function supportsInterface(bytes4 interfaceId) - 103 : : public - 104 : : view - 105 : : virtual - 106 : : override(AccessControl, RuleTransferValidation) - 107 : : returns (bool) - 108 : : { - 109 : 62 : return AccessControl.supportsInterface(interfaceId) || RuleTransferValidation.supportsInterface(interfaceId); - 110 : : } - 111 : : - 112 : : /** - 113 : : * @notice Returns true if the address is listed in at least one child whitelist rule. - 114 : : * @dev Delegates to the same child-rule scan used by transfer restriction checks. - 115 : : */ - 116 : 4 : function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { - 117 : 4 : address[] memory targets = new address[](1); - 118 : 4 : targets[0] = targetAddress; - 119 : 4 : bool[] memory result = _detectTransferRestrictionForTargets(targets); - 120 : 4 : return result[0]; - 121 : : } - 122 : : - 123 : : /* ============ Access control ============ */ - 124 : : - 125 : : /** - 126 : : * @notice Sets whether the rule should enforce spender-based checks. - 127 : : * @dev - 128 : : * - Restricted to holders of the manager role. - 129 : : * - Updates the internal `checkSpender` flag. - 130 : : * - Emits a {CheckSpenderUpdated} event. - 131 : : * @param value The new state of the `checkSpender` flag. - 132 : : */ - 133 : 4 : function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { - 134 : 3 : _setCheckSpender(value); - 135 : 3 : emit CheckSpenderUpdated(value); - 136 : : } + 5 : : /* ==== Abstract contracts === */ + 6 : : import {MetaTxModuleStandalone, ERC2771Context} from "../../../../modules/MetaTxModuleStandalone.sol"; + 7 : : import {RuleWhitelistShared} from "../core/RuleWhitelistShared.sol"; + 8 : : import {RuleTransferValidation} from "../core/RuleTransferValidation.sol"; + 9 : : /* ==== RuleEngine === */ + 10 : : import {RulesManagementModule} from "RuleEngine/modules/RulesManagementModule.sol"; + 11 : : /* ==== Interfaces === */ + 12 : : import {IAddressList} from "../../../interfaces/IAddressList.sol"; + 13 : : import {IIdentityRegistryVerified} from "../../../interfaces/IIdentityRegistry.sol"; + 14 : : + 15 : : /** + 16 : : * @title Wrapper to call several different whitelist rules (base) + 17 : : * @dev Child rules must implement {IAddressList}. + 18 : : */ + 19 : : abstract contract RuleWhitelistWrapperBase is + 20 : : RulesManagementModule, + 21 : : MetaTxModuleStandalone, + 22 : : RuleWhitelistShared, + 23 : : IIdentityRegistryVerified + 24 : : { + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : CONSTRUCTOR + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : /** + 29 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support + 30 : : */ + 31 : 44 : constructor(address forwarderIrrevocable, bool checkSpender_) MetaTxModuleStandalone(forwarderIrrevocable) { + 32 : 44 : checkSpender = checkSpender_; + 33 : : } + 34 : : + 35 : : /*////////////////////////////////////////////////////////////// + 36 : : ACCESS CONTROL + 37 : : //////////////////////////////////////////////////////////////*/ + 38 : : + 39 : 4 : modifier onlyCheckSpenderManager() { + 40 : 4 : _authorizeCheckSpenderManager(); + 41 : : _; + 42 : : } + 43 : : + 44 : 0 : function _authorizeCheckSpenderManager() internal virtual; + 45 : : + 46 : : /*////////////////////////////////////////////////////////////// + 47 : : PUBLIC FUNCTIONS + 48 : : //////////////////////////////////////////////////////////////*/ + 49 : : + 50 : : /** + 51 : : * @notice Sets whether the rule should enforce spender-based checks. + 52 : : * @dev + 53 : : * - Restricted to holders of the manager role. + 54 : : * - Updates the internal `checkSpender` flag. + 55 : : * - Emits a {CheckSpenderUpdated} event. + 56 : : * @param value The new state of the `checkSpender` flag. + 57 : : */ + 58 : 4 : function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { + 59 : 3 : _setCheckSpender(value); + 60 : 3 : emit CheckSpenderUpdated(value); + 61 : : } + 62 : : + 63 : 46 : function supportsInterface(bytes4 interfaceId) + 64 : : public + 65 : : view + 66 : : virtual + 67 : : override(RuleTransferValidation) + 68 : : returns (bool) + 69 : : { + 70 : 46 : return RuleTransferValidation.supportsInterface(interfaceId); + 71 : : } + 72 : : + 73 : : /** + 74 : : * @notice Returns true if the address is listed in at least one child whitelist rule. + 75 : : * @dev Delegates to the same child-rule scan used by transfer restriction checks. + 76 : : */ + 77 : 4 : function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { + 78 : 4 : address[] memory targets = new address[](1); + 79 : 4 : targets[0] = targetAddress; + 80 : 4 : bool[] memory result = _detectTransferRestrictionForTargets(targets); + 81 : 4 : return result[0]; + 82 : : } + 83 : : + 84 : : /*////////////////////////////////////////////////////////////// + 85 : : INTERNAL FUNCTIONS + 86 : : //////////////////////////////////////////////////////////////*/ + 87 : : + 88 : : /** + 89 : : * @notice Go through all the whitelist rules to know if a restriction exists on the transfer + 90 : : * @param from the origin address + 91 : : * @param to the destination address + 92 : : * @return The restricion code or REJECTED_CODE_BASE.TRANSFER_OK + 93 : : * + 94 : : */ + 95 : 34 : function _detectTransferRestriction( + 96 : : address from, + 97 : : address to, + 98 : : uint256 /* value */ + 99 : : ) + 100 : : internal + 101 : : view + 102 : : virtual + 103 : : override + 104 : : returns (uint8) + 105 : : { + 106 : 34 : address[] memory targetAddress = new address[](2); + 107 : 34 : targetAddress[0] = from; + 108 : 34 : targetAddress[1] = to; + 109 : : + 110 : 34 : bool[] memory result = _detectTransferRestrictionForTargets(targetAddress); + 111 [ + + ]: 34 : if (!result[0]) { + 112 : 13 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; + 113 [ + + ]: 21 : } else if (!result[1]) { + 114 : 8 : return CODE_ADDRESS_TO_NOT_WHITELISTED; + 115 : : } else { + 116 : 13 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 117 : : } + 118 : : } + 119 : : + 120 : 20 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 121 : : internal + 122 : : view + 123 : : virtual + 124 : : override + 125 : : returns (uint8) + 126 : : { + 127 [ + ]: 20 : if (!checkSpender) { + 128 : 1 : return _detectTransferRestriction(from, to, value); + 129 : : } + 130 : : + 131 : 19 : address[] memory targetAddress = new address[](3); + 132 : 19 : targetAddress[0] = from; + 133 : 19 : targetAddress[1] = to; + 134 : 19 : targetAddress[2] = spender; + 135 : : + 136 : 19 : bool[] memory result = _detectTransferRestrictionForTargets(targetAddress); 137 : : - 138 : 13 : function _transferred(address from, address to, uint256 value) - 139 : : internal - 140 : : view - 141 : : virtual - 142 : : override(RulesManagementModule, RuleWhitelistShared) - 143 : : { - 144 : 13 : RuleWhitelistShared._transferred(from, to, value); - 145 : : } - 146 : : - 147 : 1 : function _transferred(address spender, address from, address to, uint256 value) - 148 : : internal - 149 : : view - 150 : : virtual - 151 : : override(RulesManagementModule) - 152 : : { - 153 : 1 : RuleWhitelistShared._transferredFrom(spender, from, to, value); - 154 : : } - 155 : : - 156 : : /*////////////////////////////////////////////////////////////// - 157 : : INTERNAL/PRIVATE FUNCTIONS - 158 : : //////////////////////////////////////////////////////////////*/ + 138 [ + + ]: 19 : if (!result[0]) { + 139 : 1 : return CODE_ADDRESS_FROM_NOT_WHITELISTED; + 140 [ + + ]: 18 : } else if (!result[1]) { + 141 : 1 : return CODE_ADDRESS_TO_NOT_WHITELISTED; + 142 [ + + ]: 17 : } else if (!result[2]) { + 143 : 8 : return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + 144 : : } else { + 145 : 9 : return uint8(REJECTED_CODE_BASE.TRANSFER_OK); + 146 : : } + 147 : : } + 148 : : + 149 : : // ERC-7943 tokenId overloads are provided by {RuleNFTAdapter} via RuleWhitelistShared. + 150 : : + 151 : 13 : function _transferred(address from, address to, uint256 value) + 152 : : internal + 153 : : view + 154 : : virtual + 155 : : override(RulesManagementModule, RuleWhitelistShared) + 156 : : { + 157 : 13 : RuleWhitelistShared._transferred(from, to, value); + 158 : : } 159 : : - 160 : : /** - 161 : : * @notice Evaluates target addresses across all child rules. - 162 : : * @param targetAddress Addresses to validate (from/to[/spender]). - 163 : : * @return result Boolean array aligned with targetAddress indicating if each address is listed. - 164 : : */ - 165 : 57 : function _detectTransferRestrictionForTargets(address[] memory targetAddress) - 166 : : internal - 167 : : view - 168 : : virtual - 169 : : returns (bool[] memory) - 170 : : { - 171 : 57 : uint256 rulesLength = rulesCount(); - 172 : 57 : bool[] memory result = new bool[](targetAddress.length); - 173 : 57 : for (uint256 i = 0; i < rulesLength; ++i) { - 174 : : // Call the whitelist rules - 175 : : // Gas cost grows with the number of rules. Keep the wrapper list bounded. - 176 : 105 : bool[] memory isListed = IAddressList(rule(i)).areAddressesListed(targetAddress); - 177 : 105 : for (uint256 j = 0; j < targetAddress.length; ++j) { - 178 [ + ]: 85 : if (isListed[j]) { - 179 : 85 : result[j] = true; - 180 : : } - 181 : : } - 182 : : - 183 : : // Break early if all listed - 184 : 105 : bool allListed = true; - 185 : 105 : for (uint256 k = 0; k < result.length; ++k) { - 186 [ + ]: 201 : if (!result[k]) { - 187 : 81 : allListed = false; - 188 : 81 : break; + 160 : 1 : function _transferred(address spender, address from, address to, uint256 value) + 161 : : internal + 162 : : view + 163 : : virtual + 164 : : override(RulesManagementModule) + 165 : : { + 166 : 1 : RuleWhitelistShared._transferredFrom(spender, from, to, value); + 167 : : } + 168 : : + 169 : : /** + 170 : : * @notice Evaluates target addresses across all child rules. + 171 : : * @param targetAddress Addresses to validate (from/to[/spender]). + 172 : : * @return result Boolean array aligned with targetAddress indicating if each address is listed. + 173 : : */ + 174 : 57 : function _detectTransferRestrictionForTargets(address[] memory targetAddress) + 175 : : internal + 176 : : view + 177 : : virtual + 178 : : returns (bool[] memory) + 179 : : { + 180 : 57 : uint256 rulesLength = rulesCount(); + 181 : 57 : bool[] memory result = new bool[](targetAddress.length); + 182 : 57 : for (uint256 i = 0; i < rulesLength; ++i) { + 183 : : // Call the whitelist rules + 184 : : // Gas cost grows with the number of rules. Keep the wrapper list bounded. + 185 : 105 : bool[] memory isListed = IAddressList(rule(i)).areAddressesListed(targetAddress); + 186 : 105 : for (uint256 j = 0; j < targetAddress.length; ++j) { + 187 [ + ]: 85 : if (isListed[j]) { + 188 : 85 : result[j] = true; 189 : : } 190 : : } - 191 [ + ]: 24 : if (allListed) { - 192 : 24 : break; - 193 : : } - 194 : : } - 195 : 57 : return result; - 196 : : } - 197 : : - 198 : : /** - 199 : : * @notice Internal helper to update the `checkSpender` flag. - 200 : : * @param value New flag value. - 201 : : */ - 202 : 3 : function _setCheckSpender(bool value) internal virtual { - 203 : 3 : checkSpender = value; - 204 : : } - 205 : : - 206 : : /*////////////////////////////////////////////////////////////// - 207 : : ACCESS CONTROL - 208 : : //////////////////////////////////////////////////////////////*/ - 209 : : - 210 : 4 : modifier onlyCheckSpenderManager() { - 211 : 4 : _authorizeCheckSpenderManager(); - 212 : : _; + 191 : : + 192 : : // Break early if all listed + 193 : 105 : bool allListed = true; + 194 : 105 : for (uint256 k = 0; k < result.length; ++k) { + 195 [ + ]: 201 : if (!result[k]) { + 196 : 81 : allListed = false; + 197 : 81 : break; + 198 : : } + 199 : : } + 200 [ + ]: 24 : if (allListed) { + 201 : 24 : break; + 202 : : } + 203 : : } + 204 : 57 : return result; + 205 : : } + 206 : : + 207 : : /** + 208 : : * @notice Internal helper to update the `checkSpender` flag. + 209 : : * @param value New flag value. + 210 : : */ + 211 : 3 : function _setCheckSpender(bool value) internal virtual { + 212 : 3 : checkSpender = value; 213 : : } 214 : : - 215 : : function _authorizeCheckSpenderManager() internal virtual; - 216 : : - 217 : : /*////////////////////////////////////////////////////////////// - 218 : : ERC-2771 - 219 : : //////////////////////////////////////////////////////////////*/ - 220 : : - 221 : : /** - 222 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule - 223 : : */ - 224 : 145 : function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { - 225 : 145 : return ERC2771Context._msgSender(); - 226 : : } - 227 : : - 228 : : /** - 229 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule - 230 : : */ - 231 : 2 : function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { - 232 : 2 : return ERC2771Context._msgData(); - 233 : : } - 234 : : - 235 : : /** - 236 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule - 237 : : */ - 238 : 147 : function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { - 239 : 147 : return ERC2771Context._contextSuffixLength(); - 240 : : } - 241 : : } + 215 : : /*////////////////////////////////////////////////////////////// + 216 : : ERC-2771 + 217 : : //////////////////////////////////////////////////////////////*/ + 218 : : + 219 : : /** + 220 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule + 221 : : */ + 222 : 145 : function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { + 223 : 145 : return ERC2771Context._msgSender(); + 224 : : } + 225 : : + 226 : : /** + 227 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule + 228 : : */ + 229 : 2 : function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { + 230 : 2 : return ERC2771Context._msgData(); + 231 : : } + 232 : : + 233 : : /** + 234 : : * @dev This surcharge is not necessary if you do not use the MetaTxModule + 235 : : */ + 236 : 147 : function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { + 237 : 147 : return ERC2771Context._contextSuffixLength(); + 238 : : } + 239 : : } @@ -317,7 +315,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/index-sort-b.html b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-b.html similarity index 54% rename from doc/coverage/coverage/abstract/base/index-sort-b.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-b.html index 52ef854..f462f1b 100644 --- a/doc/coverage/coverage/abstract/base/index-sort-b.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-b.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base - + LCOV - lcov.info - src/rules/validation/abstract/base + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/basetop level - src/rules/validation/abstract/base Hitlcov.info Lines:378378100.0 %38539497.7 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:109109100.0 %11011992.4 %
Branches:109109111111 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleSpenderWhitelistBase.sol -
100.0%
+
100.0%
100.0 % 19 / 19 @@ -96,93 +96,93 @@ RuleWhitelistBase.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 26 / 27 + 88.9 % + 8 / 9 100.0 % - 23 / 23 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + 5 / 5 RuleMaxTotalSupplyBase.sol -
100.0%
+
97.4%97.4%
- 100.0 % - 37 / 37 - 100.0 % - 12 / 12 + 97.4 % + 37 / 38 + 92.3 % + 12 / 13 100.0 % 11 / 11 - RuleBlacklistBase.sol + RuleWhitelistWrapperBase.sol -
100.0%
+
98.5%98.5%
- 100.0 % - 33 / 33 - 100.0 % - 9 / 9 + 98.5 % + 67 / 68 + 93.3 % + 14 / 15 100.0 % 14 / 14 - RuleWhitelistWrapperBase.sol + RuleBlacklistBase.sol -
100.0%
+
100.0%
100.0 % - 67 / 67 + 33 / 33 100.0 % - 14 / 14 + 9 / 9 100.0 % 14 / 14 RuleSanctionsListBase.sol -
100.0%
+
97.9%97.9%
- 100.0 % - 47 / 47 - 100.0 % - 13 / 13 + 97.9 % + 47 / 48 + 92.9 % + 13 / 14 100.0 % 18 / 18 RuleIdentityRegistryBase.sol -
100.0%
+
98.1%98.1%
- 100.0 % - 51 / 51 - 100.0 % - 12 / 12 + 98.1 % + 51 / 52 + 92.3 % + 12 / 13 100.0 % 19 / 19 RuleERC2980Base.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 105 / 109 + 89.5 % + 34 / 38 100.0 % - 101 / 101 - 100.0 % - 33 / 33 - 100.0 % - 25 / 25 + 26 / 26

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/index-sort-f.html b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-f.html similarity index 54% rename from doc/coverage/coverage/abstract/base/index-sort-f.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-f.html index 8838841..9f69cd4 100644 --- a/doc/coverage/coverage/abstract/base/index-sort-f.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-f.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base - + LCOV - lcov.info - src/rules/validation/abstract/base + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/basetop level - src/rules/validation/abstract/base Hitlcov.info Lines:378378100.0 %38539497.7 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:109109100.0 %11011992.4 %
Branches:109109111111 100.0 %
@@ -76,113 +76,113 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage - - - RuleSpenderWhitelistBase.sol - -
100.0%
- - 100.0 % - 19 / 19 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleWhitelistBase.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 26 / 27 + 88.9 % + 8 / 9 100.0 % - 23 / 23 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + 5 / 5 - RuleBlacklistBase.sol + RuleERC2980Base.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 105 / 109 + 89.5 % + 34 / 38 100.0 % - 33 / 33 - 100.0 % - 9 / 9 - 100.0 % - 14 / 14 + 26 / 26 RuleMaxTotalSupplyBase.sol -
100.0%
+
97.4%97.4%
- 100.0 % - 37 / 37 - 100.0 % - 12 / 12 + 97.4 % + 37 / 38 + 92.3 % + 12 / 13 100.0 % 11 / 11 RuleIdentityRegistryBase.sol -
100.0%
+
98.1%98.1%
- 100.0 % - 51 / 51 - 100.0 % - 12 / 12 + 98.1 % + 51 / 52 + 92.3 % + 12 / 13 100.0 % 19 / 19 RuleSanctionsListBase.sol -
100.0%
+
97.9%97.9%
- 100.0 % - 47 / 47 - 100.0 % - 13 / 13 + 97.9 % + 47 / 48 + 92.9 % + 13 / 14 100.0 % 18 / 18 RuleWhitelistWrapperBase.sol -
100.0%
+
98.5%98.5%
- 100.0 % - 67 / 67 - 100.0 % - 14 / 14 + 98.5 % + 67 / 68 + 93.3 % + 14 / 15 100.0 % 14 / 14 - RuleERC2980Base.sol + RuleSpenderWhitelistBase.sol -
100.0%
+
100.0%
100.0 % - 101 / 101 + 19 / 19 + 100.0 % + 8 / 8 + 100.0 % + 4 / 4 + + + RuleBlacklistBase.sol + +
100.0%
+ 100.0 % 33 / 33 100.0 % - 25 / 25 + 9 / 9 + 100.0 % + 14 / 14

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/index-sort-l.html b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-l.html similarity index 54% rename from doc/coverage/coverage/abstract/base/index-sort-l.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-l.html index 30c4f5a..a565721 100644 --- a/doc/coverage/coverage/abstract/base/index-sort-l.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/index-sort-l.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base - + LCOV - lcov.info - src/rules/validation/abstract/base + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/basetop level - src/rules/validation/abstract/base Hitlcov.info Lines:378378100.0 %38539497.7 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:109109100.0 %11011992.4 %
Branches:109109111111 100.0 %
@@ -76,113 +76,113 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage - - - RuleSpenderWhitelistBase.sol - -
100.0%
- - 100.0 % - 19 / 19 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleWhitelistBase.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 26 / 27 + 88.9 % + 8 / 9 100.0 % - 23 / 23 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + 5 / 5 - RuleBlacklistBase.sol + RuleERC2980Base.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 105 / 109 + 89.5 % + 34 / 38 100.0 % - 33 / 33 - 100.0 % - 9 / 9 - 100.0 % - 14 / 14 + 26 / 26 RuleMaxTotalSupplyBase.sol -
100.0%
+
97.4%97.4%
- 100.0 % - 37 / 37 - 100.0 % - 12 / 12 + 97.4 % + 37 / 38 + 92.3 % + 12 / 13 100.0 % 11 / 11 RuleSanctionsListBase.sol -
100.0%
+
97.9%97.9%
- 100.0 % - 47 / 47 - 100.0 % - 13 / 13 + 97.9 % + 47 / 48 + 92.9 % + 13 / 14 100.0 % 18 / 18 RuleIdentityRegistryBase.sol -
100.0%
+
98.1%98.1%
- 100.0 % - 51 / 51 - 100.0 % - 12 / 12 + 98.1 % + 51 / 52 + 92.3 % + 12 / 13 100.0 % 19 / 19 RuleWhitelistWrapperBase.sol -
100.0%
+
98.5%98.5%
- 100.0 % - 67 / 67 - 100.0 % - 14 / 14 + 98.5 % + 67 / 68 + 93.3 % + 14 / 15 100.0 % 14 / 14 - RuleERC2980Base.sol + RuleSpenderWhitelistBase.sol -
100.0%
+
100.0%
100.0 % - 101 / 101 + 19 / 19 + 100.0 % + 8 / 8 + 100.0 % + 4 / 4 + + + RuleBlacklistBase.sol + +
100.0%
+ 100.0 % 33 / 33 100.0 % - 25 / 25 + 9 / 9 + 100.0 % + 14 / 14

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/base/index.html b/doc/coverage/coverage/src/rules/validation/abstract/base/index.html similarity index 54% rename from doc/coverage/coverage/abstract/base/index.html rename to doc/coverage/coverage/src/rules/validation/abstract/base/index.html index 85dc2b0..23e1e26 100644 --- a/doc/coverage/coverage/abstract/base/index.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/base/index.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/base - + LCOV - lcov.info - src/rules/validation/abstract/base + - + - +
LCOV - code coverage report
- + @@ -31,34 +31,34 @@ - - - + + + - + - - - + + + - - + + - +
Current view:top level - abstract/basetop level - src/rules/validation/abstract/base Hitlcov.info Lines:378378100.0 %38539497.7 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions:109109100.0 %11011992.4 %
Branches:109109111111 100.0 %
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleBlacklistBase.sol -
100.0%
+
100.0%
100.0 % 33 / 33 @@ -96,55 +96,55 @@ RuleERC2980Base.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 105 / 109 + 89.5 % + 34 / 38 100.0 % - 101 / 101 - 100.0 % - 33 / 33 - 100.0 % - 25 / 25 + 26 / 26 RuleIdentityRegistryBase.sol -
100.0%
+
98.1%98.1%
- 100.0 % - 51 / 51 - 100.0 % - 12 / 12 + 98.1 % + 51 / 52 + 92.3 % + 12 / 13 100.0 % 19 / 19 RuleMaxTotalSupplyBase.sol -
100.0%
+
97.4%97.4%
- 100.0 % - 37 / 37 - 100.0 % - 12 / 12 + 97.4 % + 37 / 38 + 92.3 % + 12 / 13 100.0 % 11 / 11 RuleSanctionsListBase.sol -
100.0%
+
97.9%97.9%
- 100.0 % - 47 / 47 - 100.0 % - 13 / 13 + 97.9 % + 47 / 48 + 92.9 % + 13 / 14 100.0 % 18 / 18 RuleSpenderWhitelistBase.sol -
100.0%
+
100.0%
100.0 % 19 / 19 @@ -156,24 +156,24 @@ RuleWhitelistBase.sol -
100.0%
+
96.3%96.3%
+ 96.3 % + 26 / 27 + 88.9 % + 8 / 9 100.0 % - 23 / 23 - 100.0 % - 8 / 8 - 100.0 % - 4 / 4 + 5 / 5 RuleWhitelistWrapperBase.sol -
100.0%
+
98.5%98.5%
- 100.0 % - 67 / 67 - 100.0 % - 14 / 14 + 98.5 % + 67 / 68 + 93.3 % + 14 / 15 100.0 % 14 / 14 @@ -182,7 +182,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func-sort-c.html similarity index 59% rename from doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func-sort-c.html index 261668b..bdf9e03 100644 --- a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleNFTAdapter.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleNFTAdapter.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,58 +53,66 @@ - +
Current view:top level - abstract/core - RuleNFTAdapter.sol (source / functions)top level - src/rules/validation/abstract/core - RuleNFTAdapter.sol (source / functions) Hit Lines: 2020100.0 %2290.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %1080.0 %
4 100.0 %
- - + + - + + + + + + + + + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleNFTAdapter.transferred.2RuleNFTAdapter._transferred0
RuleNFTAdapter._transferredFrom0
RuleNFTAdapter.transferred.2 6
RuleNFTAdapter.transferred.3RuleNFTAdapter.transferred.3 6
RuleNFTAdapter.transferred.1RuleNFTAdapter.transferred.1 9
RuleNFTAdapter.canTransferFromRuleNFTAdapter.canTransferFrom 11
RuleNFTAdapter.detectTransferRestrictionFromRuleNFTAdapter.detectTransferRestrictionFrom 13
RuleNFTAdapter.transferred.0RuleNFTAdapter.transferred.0 14
RuleNFTAdapter.canTransferRuleNFTAdapter.canTransfer 15
RuleNFTAdapter.detectTransferRestrictionRuleNFTAdapter.detectTransferRestriction 17

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func.html similarity index 59% rename from doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func.html index b4334cd..e2a7d04 100644 --- a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleNFTAdapter.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleNFTAdapter.sol - functions + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,58 +53,66 @@ - +
Current view:top level - abstract/core - RuleNFTAdapter.sol (source / functions)top level - src/rules/validation/abstract/core - RuleNFTAdapter.sol (source / functions) Hit Lines: 2020100.0 %2290.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %1080.0 %
4 100.0 %
- - + + - + + + + + + + + + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleNFTAdapter.canTransferRuleNFTAdapter._transferred0
RuleNFTAdapter._transferredFrom0
RuleNFTAdapter.canTransfer 15
RuleNFTAdapter.canTransferFromRuleNFTAdapter.canTransferFrom 11
RuleNFTAdapter.detectTransferRestrictionRuleNFTAdapter.detectTransferRestriction 17
RuleNFTAdapter.detectTransferRestrictionFromRuleNFTAdapter.detectTransferRestrictionFrom 13
RuleNFTAdapter.transferred.0RuleNFTAdapter.transferred.0 14
RuleNFTAdapter.transferred.1RuleNFTAdapter.transferred.1 9
RuleNFTAdapter.transferred.2RuleNFTAdapter.transferred.2 6
RuleNFTAdapter.transferred.3RuleNFTAdapter.transferred.3 6

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.gcov.html similarity index 85% rename from doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.gcov.html index 5934b99..e069990 100644 --- a/doc/coverage/coverage/abstract/core/RuleNFTAdapter.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleNFTAdapter.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleNFTAdapter.sol - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleNFTAdapter.sol + - + - +
LCOV - code coverage report
- + @@ -32,17 +32,17 @@ - - + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/core - RuleNFTAdapter.sol (source / functions)top level - src/rules/validation/abstract/core - RuleNFTAdapter.sol (source / functions) Hit Lines: 2020100.0 %2290.9 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 88100.0 %1080.0 %
4 100.0 %
@@ -94,145 +94,154 @@ 23 : : bytes4(keccak256("transferred(address,address,uint256,uint256)")); 24 : : bytes4 internal constant TRANSFERRED_SELECTOR_ERC7943_FROM = 25 : : bytes4(keccak256("transferred(address,address,address,uint256,uint256)")); - 26 : : /** - 27 : : * @notice Internal hook for post-transfer validation or state updates. - 28 : : */ - 29 : : function _transferred(address from, address to, uint256 value) internal virtual; + 26 : : + 27 : : /*////////////////////////////////////////////////////////////// + 28 : : PUBLIC FUNCTIONS + 29 : : //////////////////////////////////////////////////////////////*/ 30 : : 31 : : /** - 32 : : * @notice Internal hook for post-transfer validation or state updates (spender-aware). + 32 : : * @inheritdoc IERC7943NonFungibleComplianceExtend 33 : : */ - 34 : : function _transferredFrom(address spender, address from, address to, uint256 value) internal virtual; - 35 : : - 36 : : /** - 37 : : * @inheritdoc IERC7943NonFungibleComplianceExtend - 38 : : */ - 39 : 17 : function detectTransferRestriction( - 40 : : address from, - 41 : : address to, - 42 : : uint256, - 43 : : /* tokenId */ - 44 : : uint256 value - 45 : : ) - 46 : : public - 47 : : view - 48 : : virtual - 49 : : override(IERC7943NonFungibleComplianceExtend) - 50 : : returns (uint8) - 51 : : { - 52 : 17 : return _detectTransferRestriction(from, to, value); - 53 : : } - 54 : : - 55 : : /** - 56 : : * @inheritdoc IERC7943NonFungibleComplianceExtend - 57 : : */ - 58 : 13 : function detectTransferRestrictionFrom( - 59 : : address spender, - 60 : : address from, - 61 : : address to, - 62 : : uint256, - 63 : : /* tokenId */ - 64 : : uint256 value - 65 : : ) public view virtual override(IERC7943NonFungibleComplianceExtend) returns (uint8) { - 66 : 13 : return _detectTransferRestrictionFrom(spender, from, to, value); - 67 : : } - 68 : : - 69 : : /** - 70 : : * @inheritdoc IERC7943NonFungibleCompliance - 71 : : */ - 72 : 15 : function canTransfer( - 73 : : address from, - 74 : : address to, - 75 : : uint256, - 76 : : /* tokenId */ - 77 : : uint256 amount - 78 : : ) - 79 : : public - 80 : : view - 81 : : override(IERC7943NonFungibleCompliance) - 82 : : returns (bool) - 83 : : { - 84 : 15 : return _detectTransferRestriction(from, to, amount) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 85 : : } - 86 : : - 87 : : /** - 88 : : * @inheritdoc IERC7943NonFungibleComplianceExtend - 89 : : */ - 90 : 11 : function canTransferFrom( - 91 : : address spender, - 92 : : address from, - 93 : : address to, - 94 : : uint256, - 95 : : /* tokenId */ - 96 : : uint256 value - 97 : : ) - 98 : : public - 99 : : view - 100 : : virtual - 101 : : override(IERC7943NonFungibleComplianceExtend) - 102 : : returns (bool) - 103 : : { - 104 : 11 : return _detectTransferRestrictionFrom(spender, from, to, value) - 105 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 106 : : } - 107 : : - 108 : : /** - 109 : : * @inheritdoc IERC7943NonFungibleComplianceExtend - 110 : : */ - 111 : 14 : function transferred( - 112 : : address from, - 113 : : address to, - 114 : : uint256, - 115 : : /* tokenId */ - 116 : : uint256 value - 117 : : ) - 118 : : public - 119 : : virtual - 120 : : override(IERC7943NonFungibleComplianceExtend) - 121 : : { - 122 : 14 : _transferred(from, to, value); - 123 : : } - 124 : : - 125 : : /** - 126 : : * @inheritdoc IERC7943NonFungibleComplianceExtend - 127 : : */ - 128 : 9 : function transferred( - 129 : : address spender, - 130 : : address from, - 131 : : address to, - 132 : : uint256, - 133 : : /* tokenId */ - 134 : : uint256 value - 135 : : ) - 136 : : public - 137 : : virtual - 138 : : override(IERC7943NonFungibleComplianceExtend) - 139 : : { - 140 : 9 : _transferredFrom(spender, from, to, value); - 141 : : } - 142 : : - 143 : : /** - 144 : : * @inheritdoc ITransferContext - 145 : : */ - 146 : 6 : function transferred(MultiTokenTransferContext calldata ctx) external virtual override { - 147 [ + + ]: 6 : if (ctx.sender != address(0) && ctx.sender != ctx.from) { - 148 : 3 : _transferredFrom(ctx.sender, ctx.from, ctx.to, ctx.value); - 149 : : } else { - 150 : 3 : _transferred(ctx.from, ctx.to, ctx.value); - 151 : : } - 152 : : } - 153 : : - 154 : : /** - 155 : : * @inheritdoc ITransferContext - 156 : : */ - 157 : 6 : function transferred(FungibleTransferContext calldata ctx) external virtual override { - 158 [ + + ]: 6 : if (ctx.sender != address(0) && ctx.sender != ctx.from) { - 159 : 3 : _transferredFrom(ctx.sender, ctx.from, ctx.to, ctx.value); - 160 : : } else { - 161 : 3 : _transferred(ctx.from, ctx.to, ctx.value); - 162 : : } - 163 : : } - 164 : : } + 34 : 17 : function detectTransferRestriction( + 35 : : address from, + 36 : : address to, + 37 : : uint256, + 38 : : /* tokenId */ + 39 : : uint256 value + 40 : : ) + 41 : : public + 42 : : view + 43 : : virtual + 44 : : override(IERC7943NonFungibleComplianceExtend) + 45 : : returns (uint8) + 46 : : { + 47 : 17 : return _detectTransferRestriction(from, to, value); + 48 : : } + 49 : : + 50 : : /** + 51 : : * @inheritdoc IERC7943NonFungibleComplianceExtend + 52 : : */ + 53 : 13 : function detectTransferRestrictionFrom( + 54 : : address spender, + 55 : : address from, + 56 : : address to, + 57 : : uint256, + 58 : : /* tokenId */ + 59 : : uint256 value + 60 : : ) public view virtual override(IERC7943NonFungibleComplianceExtend) returns (uint8) { + 61 : 13 : return _detectTransferRestrictionFrom(spender, from, to, value); + 62 : : } + 63 : : + 64 : : /** + 65 : : * @inheritdoc IERC7943NonFungibleCompliance + 66 : : */ + 67 : 15 : function canTransfer( + 68 : : address from, + 69 : : address to, + 70 : : uint256, + 71 : : /* tokenId */ + 72 : : uint256 amount + 73 : : ) + 74 : : public + 75 : : view + 76 : : override(IERC7943NonFungibleCompliance) + 77 : : returns (bool) + 78 : : { + 79 : 15 : return _detectTransferRestriction(from, to, amount) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 80 : : } + 81 : : + 82 : : /** + 83 : : * @inheritdoc IERC7943NonFungibleComplianceExtend + 84 : : */ + 85 : 11 : function canTransferFrom( + 86 : : address spender, + 87 : : address from, + 88 : : address to, + 89 : : uint256, + 90 : : /* tokenId */ + 91 : : uint256 value + 92 : : ) + 93 : : public + 94 : : view + 95 : : virtual + 96 : : override(IERC7943NonFungibleComplianceExtend) + 97 : : returns (bool) + 98 : : { + 99 : 11 : return _detectTransferRestrictionFrom(spender, from, to, value) + 100 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 101 : : } + 102 : : + 103 : : /** + 104 : : * @inheritdoc IERC7943NonFungibleComplianceExtend + 105 : : */ + 106 : 14 : function transferred( + 107 : : address from, + 108 : : address to, + 109 : : uint256, + 110 : : /* tokenId */ + 111 : : uint256 value + 112 : : ) + 113 : : public + 114 : : virtual + 115 : : override(IERC7943NonFungibleComplianceExtend) + 116 : : { + 117 : 14 : _transferred(from, to, value); + 118 : : } + 119 : : + 120 : : /** + 121 : : * @inheritdoc IERC7943NonFungibleComplianceExtend + 122 : : */ + 123 : 9 : function transferred( + 124 : : address spender, + 125 : : address from, + 126 : : address to, + 127 : : uint256, + 128 : : /* tokenId */ + 129 : : uint256 value + 130 : : ) + 131 : : public + 132 : : virtual + 133 : : override(IERC7943NonFungibleComplianceExtend) + 134 : : { + 135 : 9 : _transferredFrom(spender, from, to, value); + 136 : : } + 137 : : + 138 : : /** + 139 : : * @inheritdoc ITransferContext + 140 : : */ + 141 : 6 : function transferred(MultiTokenTransferContext calldata ctx) external virtual override { + 142 [ + + ]: 6 : if (ctx.sender != address(0) && ctx.sender != ctx.from) { + 143 : 3 : _transferredFrom(ctx.sender, ctx.from, ctx.to, ctx.value); + 144 : : } else { + 145 : 3 : _transferred(ctx.from, ctx.to, ctx.value); + 146 : : } + 147 : : } + 148 : : + 149 : : /** + 150 : : * @inheritdoc ITransferContext + 151 : : */ + 152 : 6 : function transferred(FungibleTransferContext calldata ctx) external virtual override { + 153 [ + + ]: 6 : if (ctx.sender != address(0) && ctx.sender != ctx.from) { + 154 : 3 : _transferredFrom(ctx.sender, ctx.from, ctx.to, ctx.value); + 155 : : } else { + 156 : 3 : _transferred(ctx.from, ctx.to, ctx.value); + 157 : : } + 158 : : } + 159 : : + 160 : : /*////////////////////////////////////////////////////////////// + 161 : : INTERNAL FUNCTIONS + 162 : : //////////////////////////////////////////////////////////////*/ + 163 : : + 164 : : /** + 165 : : * @notice Internal hook for post-transfer validation or state updates. + 166 : : */ + 167 : 0 : function _transferred(address from, address to, uint256 value) internal virtual; + 168 : : + 169 : : /** + 170 : : * @notice Internal hook for post-transfer validation or state updates (spender-aware). + 171 : : */ + 172 : 0 : function _transferredFrom(address spender, address from, address to, uint256 value) internal virtual; + 173 : : } @@ -240,7 +249,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func-sort-c.html similarity index 53% rename from doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func-sort-c.html index ec2abb0..691709b 100644 --- a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleTransferValidation.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleTransferValidation.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,46 +53,54 @@ - +
Current view:top level - abstract/core - RuleTransferValidation.sol (source / functions)top level - src/rules/validation/abstract/core - RuleTransferValidation.sol (source / functions) Hitlcov.info Lines:1010100.0 %141687.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 55100.0 %771.4 %
0 -
- - + + - + + + + + + + + + - + - + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleTransferValidation.canTransferFromRuleTransferValidation._detectTransferRestriction0
RuleTransferValidation._detectTransferRestrictionFrom0
RuleTransferValidation.canTransferFrom 14
RuleTransferValidation.canTransferRuleTransferValidation.canTransfer 21
RuleTransferValidation.detectTransferRestrictionFromRuleTransferValidation.detectTransferRestrictionFrom 38
RuleTransferValidation.supportsInterface196RuleTransferValidation.supportsInterface198
RuleTransferValidation.detectTransferRestriction349RuleTransferValidation.detectTransferRestriction351

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func.html similarity index 53% rename from doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func.html index d272ef1..8610b70 100644 --- a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleTransferValidation.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleTransferValidation.sol - functions + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,46 +53,54 @@ - +
Current view:top level - abstract/core - RuleTransferValidation.sol (source / functions)top level - src/rules/validation/abstract/core - RuleTransferValidation.sol (source / functions) Hitlcov.info Lines:1010100.0 %141687.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 55100.0 %771.4 %
0 -
- - + + - + + + + + + + + + - + - - + + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleTransferValidation.canTransferRuleTransferValidation._detectTransferRestriction0
RuleTransferValidation._detectTransferRestrictionFrom0
RuleTransferValidation.canTransfer 21
RuleTransferValidation.canTransferFromRuleTransferValidation.canTransferFrom 14
RuleTransferValidation.detectTransferRestriction349RuleTransferValidation.detectTransferRestriction351
RuleTransferValidation.detectTransferRestrictionFromRuleTransferValidation.detectTransferRestrictionFrom 38
RuleTransferValidation.supportsInterface196RuleTransferValidation.supportsInterface198

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.gcov.html similarity index 68% rename from doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.gcov.html index 7d4c05a..b207db3 100644 --- a/doc/coverage/coverage/abstract/core/RuleTransferValidation.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleTransferValidation.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleTransferValidation.sol - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleTransferValidation.sol + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/core - RuleTransferValidation.sol (source / functions)top level - src/rules/validation/abstract/core - RuleTransferValidation.sol (source / functions) Hitlcov.info Lines:1010100.0 %141687.5 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 55100.0 %771.4 %
0 -
@@ -75,109 +75,124 @@ 4 : : 5 : : /* ==== CMTAT === */ 6 : : import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol"; - 7 : : import {IERC3643ComplianceRead} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; + 7 : : import {IERC3643ComplianceRead, IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; 8 : : import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; 9 : : /* ==== RuleEngine === */ 10 : : import {IRule} from "RuleEngine/interfaces/IRule.sol"; 11 : : import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; - 12 : : /* ==== Modules === */ - 13 : : import {VersionModule} from "../../../../modules/VersionModule.sol"; - 14 : : - 15 : : abstract contract RuleTransferValidation is - 16 : : VersionModule, - 17 : : IERC1404Extend, - 18 : : IERC3643ComplianceRead, - 19 : : IERC7551Compliance, - 20 : : IRule - 21 : : { - 22 : : /** - 23 : : * @notice Internal transfer restriction check. - 24 : : * @param from the origin address - 25 : : * @param to the destination address - 26 : : * @param value amount to transfer - 27 : : * @return restrictionCode The restriction code for this rule. - 28 : : */ - 29 : : function _detectTransferRestriction(address from, address to, uint256 value) - 30 : : internal - 31 : : view - 32 : : virtual - 33 : : returns (uint8 restrictionCode); - 34 : : - 35 : : /** - 36 : : * @notice Internal transfer restriction check for spender-initiated transfers. - 37 : : * @param spender the caller executing the transfer - 38 : : * @param from the origin address - 39 : : * @param to the destination address - 40 : : * @param value amount to transfer - 41 : : * @return restrictionCode The restriction code for this rule. - 42 : : */ - 43 : : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 44 : : internal - 45 : : view - 46 : : virtual - 47 : : returns (uint8 restrictionCode); - 48 : : - 49 : : /** - 50 : : * @inheritdoc IERC1404 - 51 : : */ - 52 : 349 : function detectTransferRestriction(address from, address to, uint256 value) - 53 : : public - 54 : : view - 55 : : virtual - 56 : : override(IERC1404) - 57 : : returns (uint8) - 58 : : { - 59 : 349 : return _detectTransferRestriction(from, to, value); - 60 : : } - 61 : : - 62 : : /** - 63 : : * @inheritdoc IERC1404Extend - 64 : : */ - 65 : 38 : function detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - 66 : : public - 67 : : view - 68 : : virtual - 69 : : override(IERC1404Extend) - 70 : : returns (uint8) - 71 : : { - 72 : 38 : return _detectTransferRestrictionFrom(spender, from, to, value); - 73 : : } - 74 : : - 75 : : /** - 76 : : * @notice Validate a transfer - 77 : : * @param from the origin address - 78 : : * @param to the destination address - 79 : : * @param amount to transfer - 80 : : * @return isValid => true if the transfer is valid, false otherwise - 81 : : * - 82 : : */ - 83 : 21 : function canTransfer(address from, address to, uint256 amount) - 84 : : public - 85 : : view - 86 : : override(IERC3643ComplianceRead) - 87 : : returns (bool isValid) - 88 : : { - 89 : 21 : return _detectTransferRestriction(from, to, amount) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 90 : : } - 91 : : - 92 : : /** - 93 : : * @inheritdoc IERC7551Compliance - 94 : : */ - 95 : 14 : function canTransferFrom(address spender, address from, address to, uint256 value) - 96 : : public - 97 : : view - 98 : : virtual - 99 : : override(IERC7551Compliance) - 100 : : returns (bool) - 101 : : { - 102 : 14 : return _detectTransferRestrictionFrom(spender, from, to, value) - 103 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - 104 : : } - 105 : : - 106 : 196 : function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { - 107 : 196 : return interfaceId == type(IRule).interfaceId || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID; - 108 : : } - 109 : : } + 12 : : /* ==== CMTAT libraries === */ + 13 : : import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; + 14 : : import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; + 15 : : /* ==== Modules === */ + 16 : : import {VersionModule} from "../../../../modules/VersionModule.sol"; + 17 : : + 18 : : abstract contract RuleTransferValidation is + 19 : : VersionModule, + 20 : : IERC1404Extend, + 21 : : IERC3643ComplianceRead, + 22 : : IERC7551Compliance, + 23 : : IRule + 24 : : { + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : PUBLIC FUNCTIONS + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : + 29 : : /** + 30 : : * @inheritdoc IERC1404 + 31 : : */ + 32 : 351 : function detectTransferRestriction(address from, address to, uint256 value) + 33 : : public + 34 : : view + 35 : : virtual + 36 : : override(IERC1404) + 37 : : returns (uint8) + 38 : : { + 39 : 351 : return _detectTransferRestriction(from, to, value); + 40 : : } + 41 : : + 42 : : /** + 43 : : * @inheritdoc IERC1404Extend + 44 : : */ + 45 : 38 : function detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 46 : : public + 47 : : view + 48 : : virtual + 49 : : override(IERC1404Extend) + 50 : : returns (uint8) + 51 : : { + 52 : 38 : return _detectTransferRestrictionFrom(spender, from, to, value); + 53 : : } + 54 : : + 55 : : /** + 56 : : * @notice Validate a transfer + 57 : : * @param from the origin address + 58 : : * @param to the destination address + 59 : : * @param amount to transfer + 60 : : * @return isValid => true if the transfer is valid, false otherwise + 61 : : * + 62 : : */ + 63 : 21 : function canTransfer(address from, address to, uint256 amount) + 64 : : public + 65 : : view + 66 : : override(IERC3643ComplianceRead) + 67 : : returns (bool isValid) + 68 : : { + 69 : 21 : return _detectTransferRestriction(from, to, amount) == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 70 : : } + 71 : : + 72 : : /** + 73 : : * @inheritdoc IERC7551Compliance + 74 : : */ + 75 : 14 : function canTransferFrom(address spender, address from, address to, uint256 value) + 76 : : public + 77 : : view + 78 : : virtual + 79 : : override(IERC7551Compliance) + 80 : : returns (bool) + 81 : : { + 82 : 14 : return _detectTransferRestrictionFrom(spender, from, to, value) + 83 : : == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + 84 : : } + 85 : : + 86 : 198 : function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { + 87 : 198 : return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + 88 : 197 : || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + 89 : 196 : || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + 90 : 108 : || interfaceId == type(IERC7551Compliance).interfaceId + 91 : 108 : || interfaceId == type(IERC3643IComplianceContract).interfaceId; + 92 : : } + 93 : : + 94 : : /*////////////////////////////////////////////////////////////// + 95 : : INTERNAL FUNCTIONS + 96 : : //////////////////////////////////////////////////////////////*/ + 97 : : + 98 : : /** + 99 : : * @notice Internal transfer restriction check. + 100 : : * @param from the origin address + 101 : : * @param to the destination address + 102 : : * @param value amount to transfer + 103 : : * @return restrictionCode The restriction code for this rule. + 104 : : */ + 105 : 0 : function _detectTransferRestriction(address from, address to, uint256 value) + 106 : : internal + 107 : : view + 108 : : virtual + 109 : : returns (uint8 restrictionCode); + 110 : : + 111 : : /** + 112 : : * @notice Internal transfer restriction check for spender-initiated transfers. + 113 : : * @param spender the caller executing the transfer + 114 : : * @param from the origin address + 115 : : * @param to the destination address + 116 : : * @param value amount to transfer + 117 : : * @return restrictionCode The restriction code for this rule. + 118 : : */ + 119 : 0 : function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + 120 : : internal + 121 : : view + 122 : : virtual + 123 : : returns (uint8 restrictionCode); + 124 : : } @@ -185,7 +200,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func-sort-c.html index 90e0227..a63e0a3 100644 --- a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleWhitelistShared.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleWhitelistShared.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - abstract/core - RuleWhitelistShared.sol (source / functions)top level - src/rules/validation/abstract/core - RuleWhitelistShared.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 610 100.0 %
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistShared.transferred.1RuleWhitelistShared.transferred.1 4
RuleWhitelistShared.canReturnTransferRestrictionCodeRuleWhitelistShared.canReturnTransferRestrictionCode 10
RuleWhitelistShared._transferredFromRuleWhitelistShared._transferredFrom 11
RuleWhitelistShared.messageForTransferRestrictionRuleWhitelistShared.messageForTransferRestriction 14
RuleWhitelistShared.transferred.0RuleWhitelistShared.transferred.0 19
RuleWhitelistShared._transferredRuleWhitelistShared._transferred 28

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func.html similarity index 67% rename from doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func.html index f0a8b05..10d6f20 100644 --- a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleWhitelistShared.sol - functions - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleWhitelistShared.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - abstract/core - RuleWhitelistShared.sol (source / functions)top level - src/rules/validation/abstract/core - RuleWhitelistShared.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 610 100.0 %
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistShared._transferredRuleWhitelistShared._transferred 28
RuleWhitelistShared._transferredFromRuleWhitelistShared._transferredFrom 11
RuleWhitelistShared.canReturnTransferRestrictionCodeRuleWhitelistShared.canReturnTransferRestrictionCode 10
RuleWhitelistShared.messageForTransferRestrictionRuleWhitelistShared.messageForTransferRestriction 14
RuleWhitelistShared.transferred.0RuleWhitelistShared.transferred.0 19
RuleWhitelistShared.transferred.1RuleWhitelistShared.transferred.1 4

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.gcov.html similarity index 82% rename from doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.gcov.html index d899353..e186485 100644 --- a/doc/coverage/coverage/abstract/core/RuleWhitelistShared.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/RuleWhitelistShared.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core/RuleWhitelistShared.sol - + LCOV - lcov.info - src/rules/validation/abstract/core/RuleWhitelistShared.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/core - RuleWhitelistShared.sol (source / functions)top level - src/rules/validation/abstract/core - RuleWhitelistShared.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 610 100.0 %
@@ -93,92 +93,101 @@ 22 : : */ 23 : : bool public checkSpender; 24 : : - 25 : : /* ============ View Functions ============ */ - 26 : : /** - 27 : : * @notice Checks whether a restriction code is recognized by this rule. - 28 : : * @dev - 29 : : * Used to verify if a returned restriction code belongs to the whitelist rule. - 30 : : * @param restrictionCode The restriction code to validate. - 31 : : * @return isKnown True if the restriction code is recognized by this rule, false otherwise. - 32 : : */ - 33 : 10 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool isKnown) { - 34 : 10 : return restrictionCode == CODE_ADDRESS_FROM_NOT_WHITELISTED - 35 : 5 : || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED - 36 : 2 : || restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - 37 : : } - 38 : : - 39 : : /** - 40 : : * @notice Returns the human-readable message corresponding to a restriction code. - 41 : : * @dev - 42 : : * Returns a descriptive text that explains why a transfer was restricted. - 43 : : * @param restrictionCode The restriction code to decode. - 44 : : * @return message A human-readable explanation of the restriction. - 45 : : */ - 46 : 14 : function messageForTransferRestriction(uint8 restrictionCode) - 47 : : external - 48 : : pure - 49 : : override - 50 : : returns (string memory message) - 51 : : { - 52 [ + + ]: 14 : if (restrictionCode == CODE_ADDRESS_FROM_NOT_WHITELISTED) { - 53 : 6 : return TEXT_ADDRESS_FROM_NOT_WHITELISTED; - 54 [ + + ]: 8 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { - 55 : 4 : return TEXT_ADDRESS_TO_NOT_WHITELISTED; - 56 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED) { - 57 : 2 : return TEXT_ADDRESS_SPENDER_NOT_WHITELISTED; - 58 : : } else { - 59 : 2 : return TEXT_CODE_NOT_FOUND; - 60 : : } - 61 : : } - 62 : : - 63 : : /* ============ State Functions ============ */ - 64 : : - 65 : : /** - 66 : : * @notice ERC-3643 hook called when a transfer occurs. - 67 : : * @dev - 68 : : * - Validates that both `from` and `to` addresses are whitelisted. - 69 : : * - Reverts if any restriction code other than `TRANSFER_OK` is returned. - 70 : : * - Validation only; does not modify state. - 71 : : * - Should be called during token transfer logic to enforce whitelist compliance. - 72 : : * @param from The address sending tokens. - 73 : : * @param to The address receiving tokens. - 74 : : * @param value The token amount being transferred. - 75 : : */ - 76 : 19 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - 77 : 19 : _transferred(from, to, value); - 78 : : } - 79 : : - 80 : : /** - 81 : : * @notice hook called when a delegated transfer occurs (`transferFrom`). - 82 : : * @dev - 83 : : * - Validates that `spender`, `from`, and `to` are all whitelisted. - 84 : : * - Reverts if any restriction code other than `TRANSFER_OK` is returned. - 85 : : * - Validation only; does not modify state. - 86 : : * @param spender The address performing the transfer on behalf of another. - 87 : : * @param from The address from which tokens are transferred. - 88 : : * @param to The recipient address. - 89 : : * @param value The token amount being transferred. - 90 : : */ - 91 : 4 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - 92 : 4 : _transferredFrom(spender, from, to, value); - 93 : : } - 94 : : - 95 : 28 : function _transferred(address from, address to, uint256 value) internal view virtual override { - 96 : 28 : uint8 code = _detectTransferRestriction(from, to, value); - 97 [ + + ]: 28 : require( - 98 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), - 99 : : RuleWhitelist_InvalidTransfer(address(this), from, to, value, code) - 100 : : ); - 101 : : } - 102 : : - 103 : 11 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - 104 : 11 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - 105 [ + + ]: 11 : require( - 106 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), - 107 : : RuleWhitelist_InvalidTransferFrom(address(this), spender, from, to, value, code) - 108 : : ); - 109 : : } - 110 : : } + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : EXTERNAL FUNCTIONS + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : + 29 : : /** + 30 : : * @notice Checks whether a restriction code is recognized by this rule. + 31 : : * @dev + 32 : : * Used to verify if a returned restriction code belongs to the whitelist rule. + 33 : : * @param restrictionCode The restriction code to validate. + 34 : : * @return isKnown True if the restriction code is recognized by this rule, false otherwise. + 35 : : */ + 36 : 10 : function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool isKnown) { + 37 : 10 : return restrictionCode == CODE_ADDRESS_FROM_NOT_WHITELISTED + 38 : 5 : || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED + 39 : 2 : || restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + 40 : : } + 41 : : + 42 : : /** + 43 : : * @notice Returns the human-readable message corresponding to a restriction code. + 44 : : * @dev + 45 : : * Returns a descriptive text that explains why a transfer was restricted. + 46 : : * @param restrictionCode The restriction code to decode. + 47 : : * @return message A human-readable explanation of the restriction. + 48 : : */ + 49 : 14 : function messageForTransferRestriction(uint8 restrictionCode) + 50 : : external + 51 : : pure + 52 : : override + 53 : : returns (string memory message) + 54 : : { + 55 [ + + ]: 14 : if (restrictionCode == CODE_ADDRESS_FROM_NOT_WHITELISTED) { + 56 : 6 : return TEXT_ADDRESS_FROM_NOT_WHITELISTED; + 57 [ + + ]: 8 : } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { + 58 : 4 : return TEXT_ADDRESS_TO_NOT_WHITELISTED; + 59 [ + + ]: 4 : } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED) { + 60 : 2 : return TEXT_ADDRESS_SPENDER_NOT_WHITELISTED; + 61 : : } else { + 62 : 2 : return TEXT_CODE_NOT_FOUND; + 63 : : } + 64 : : } + 65 : : + 66 : : /*////////////////////////////////////////////////////////////// + 67 : : PUBLIC FUNCTIONS + 68 : : //////////////////////////////////////////////////////////////*/ + 69 : : + 70 : : /** + 71 : : * @notice ERC-3643 hook called when a transfer occurs. + 72 : : * @dev + 73 : : * - Validates that both `from` and `to` addresses are whitelisted. + 74 : : * - Reverts if any restriction code other than `TRANSFER_OK` is returned. + 75 : : * - Validation only; does not modify state. + 76 : : * - Should be called during token transfer logic to enforce whitelist compliance. + 77 : : * @param from The address sending tokens. + 78 : : * @param to The address receiving tokens. + 79 : : * @param value The token amount being transferred. + 80 : : */ + 81 : 19 : function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + 82 : 19 : _transferred(from, to, value); + 83 : : } + 84 : : + 85 : : /** + 86 : : * @notice hook called when a delegated transfer occurs (`transferFrom`). + 87 : : * @dev + 88 : : * - Validates that `spender`, `from`, and `to` are all whitelisted. + 89 : : * - Reverts if any restriction code other than `TRANSFER_OK` is returned. + 90 : : * - Validation only; does not modify state. + 91 : : * @param spender The address performing the transfer on behalf of another. + 92 : : * @param from The address from which tokens are transferred. + 93 : : * @param to The recipient address. + 94 : : * @param value The token amount being transferred. + 95 : : */ + 96 : 4 : function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + 97 : 4 : _transferredFrom(spender, from, to, value); + 98 : : } + 99 : : + 100 : : /*////////////////////////////////////////////////////////////// + 101 : : INTERNAL FUNCTIONS + 102 : : //////////////////////////////////////////////////////////////*/ + 103 : : + 104 : 28 : function _transferred(address from, address to, uint256 value) internal view virtual override { + 105 : 28 : uint8 code = _detectTransferRestriction(from, to, value); + 106 [ + + ]: 28 : require( + 107 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), + 108 : : RuleWhitelist_InvalidTransfer(address(this), from, to, value, code) + 109 : : ); + 110 : : } + 111 : : + 112 : 11 : function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + 113 : 11 : uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + 114 [ + + ]: 11 : require( + 115 : : code == uint8(REJECTED_CODE_BASE.TRANSFER_OK), + 116 : : RuleWhitelist_InvalidTransferFrom(address(this), spender, from, to, value, code) + 117 : : ); + 118 : : } + 119 : : } @@ -186,7 +195,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/index-sort-b.html b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-b.html similarity index 58% rename from doc/coverage/coverage/abstract/core/index-sort-b.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-b.html index e6fef6b..8b5a077 100644 --- a/doc/coverage/coverage/abstract/core/index-sort-b.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-b.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core - + LCOV - lcov.info - src/rules/validation/abstract/core + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/coretop level - src/rules/validation/abstract/core Hitlcov.info Lines:5252100.0 %566093.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1919100.0 %2382.6 %
14 100.0 %
@@ -76,39 +76,39 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleTransferValidation.sol -
100.0%
+
87.5%87.5%
- 100.0 % - 10 / 10 - 100.0 % - 5 / 5 + 87.5 % + 14 / 16 + 71.4 % + 5 / 7 - 0 / 0 RuleNFTAdapter.sol -
100.0%
+
90.9%90.9%
- 100.0 % - 20 / 20 - 100.0 % - 8 / 8 + 90.9 % + 20 / 22 + 80.0 % + 8 / 10 100.0 % 4 / 4 RuleWhitelistShared.sol -
100.0%
+
100.0%
100.0 % 22 / 22 @@ -122,7 +122,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/index-sort-f.html b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-f.html similarity index 58% rename from doc/coverage/coverage/abstract/core/index-sort-f.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-f.html index 89620b4..38fe74f 100644 --- a/doc/coverage/coverage/abstract/core/index-sort-f.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-f.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core - + LCOV - lcov.info - src/rules/validation/abstract/core + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/coretop level - src/rules/validation/abstract/core Hitlcov.info Lines:5252100.0 %566093.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1919100.0 %2382.6 %
14 100.0 %
@@ -76,53 +76,53 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleTransferValidation.sol -
100.0%
+
87.5%87.5%
- 100.0 % - 10 / 10 - 100.0 % - 5 / 5 + 87.5 % + 14 / 16 + 71.4 % + 5 / 7 - 0 / 0 - RuleWhitelistShared.sol + RuleNFTAdapter.sol -
100.0%
+
90.9%90.9%
+ 90.9 % + 20 / 22 + 80.0 % + 8 / 10 100.0 % - 22 / 22 - 100.0 % - 6 / 6 - 100.0 % - 10 / 10 + 4 / 4 - RuleNFTAdapter.sol + RuleWhitelistShared.sol -
100.0%
+
100.0%
100.0 % - 20 / 20 + 22 / 22 100.0 % - 8 / 8 + 6 / 6 100.0 % - 4 / 4 + 10 / 10

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/index-sort-l.html b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-l.html similarity index 58% rename from doc/coverage/coverage/abstract/core/index-sort-l.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-l.html index 599a86c..809d81e 100644 --- a/doc/coverage/coverage/abstract/core/index-sort-l.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/index-sort-l.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core - + LCOV - lcov.info - src/rules/validation/abstract/core + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/coretop level - src/rules/validation/abstract/core Hitlcov.info Lines:5252100.0 %566093.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1919100.0 %2382.6 %
14 100.0 %
@@ -76,39 +76,39 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleTransferValidation.sol -
100.0%
+
87.5%87.5%
- 100.0 % - 10 / 10 - 100.0 % - 5 / 5 + 87.5 % + 14 / 16 + 71.4 % + 5 / 7 - 0 / 0 RuleNFTAdapter.sol -
100.0%
+
90.9%90.9%
- 100.0 % - 20 / 20 - 100.0 % - 8 / 8 + 90.9 % + 20 / 22 + 80.0 % + 8 / 10 100.0 % 4 / 4 RuleWhitelistShared.sol -
100.0%
+
100.0%
100.0 % 22 / 22 @@ -122,7 +122,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/abstract/core/index.html b/doc/coverage/coverage/src/rules/validation/abstract/core/index.html similarity index 58% rename from doc/coverage/coverage/abstract/core/index.html rename to doc/coverage/coverage/src/rules/validation/abstract/core/index.html index 29a0739..e7fb9a0 100644 --- a/doc/coverage/coverage/abstract/core/index.html +++ b/doc/coverage/coverage/src/rules/validation/abstract/core/index.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - abstract/core - + LCOV - lcov.info - src/rules/validation/abstract/core + - + - +
LCOV - code coverage report
- + @@ -31,18 +31,18 @@ - - - + + + - + - - + + @@ -53,12 +53,12 @@ - +
Current view:top level - abstract/coretop level - src/rules/validation/abstract/core Hitlcov.info Lines:5252100.0 %566093.3 %
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 1919100.0 %2382.6 %
14 100.0 %
@@ -76,39 +76,39 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleNFTAdapter.sol -
100.0%
+
90.9%90.9%
- 100.0 % - 20 / 20 - 100.0 % - 8 / 8 + 90.9 % + 20 / 22 + 80.0 % + 8 / 10 100.0 % 4 / 4 RuleTransferValidation.sol -
100.0%
+
87.5%87.5%
- 100.0 % - 10 / 10 - 100.0 % - 5 / 5 + 87.5 % + 14 / 16 + 71.4 % + 5 / 7 - 0 / 0 RuleWhitelistShared.sol -
100.0%
+
100.0%
100.0 % 22 / 22 @@ -122,7 +122,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklist.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func-sort-c.html similarity index 68% rename from doc/coverage/coverage/deployment/RuleBlacklist.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func-sort-c.html index 7133758..c9ba010 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklist.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleBlacklist.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklist._authorizeAddressListRemoveRuleBlacklist._authorizeAddressListRemove 1
RuleBlacklist._msgDataRuleBlacklist._msgData 1
RuleBlacklist._authorizeAddressListAddRuleBlacklist._authorizeAddressListAdd 28
RuleBlacklist._msgSenderRuleBlacklist._msgSender 83
RuleBlacklist._contextSuffixLengthRuleBlacklist._contextSuffixLength 84
RuleBlacklist.supportsInterfaceRuleBlacklist.supportsInterface 91

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklist.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func.html similarity index 68% rename from doc/coverage/coverage/deployment/RuleBlacklist.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func.html index 0e71043..a23d580 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklist.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleBlacklist.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklist._authorizeAddressListAddRuleBlacklist._authorizeAddressListAdd 28
RuleBlacklist._authorizeAddressListRemoveRuleBlacklist._authorizeAddressListRemove 1
RuleBlacklist._contextSuffixLengthRuleBlacklist._contextSuffixLength 84
RuleBlacklist._msgDataRuleBlacklist._msgData 1
RuleBlacklist._msgSenderRuleBlacklist._msgSender 83
RuleBlacklist.supportsInterfaceRuleBlacklist.supportsInterface 91

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklist.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.gcov.html similarity index 77% rename from doc/coverage/coverage/deployment/RuleBlacklist.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.gcov.html index a674ee2..c42a129 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklist.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklist.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklist.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklist.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleBlacklist.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
@@ -73,8 +73,8 @@ 2 : : 3 : : pragma solidity ^0.8.20; 4 : : - 5 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 5 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 8 : : /* ==== Abstract contracts === */ 9 : : import {RuleBlacklistBase} from "../abstract/base/RuleBlacklistBase.sol"; @@ -96,33 +96,45 @@ 25 : : AccessControlModuleStandalone(admin) 26 : : {} 27 : : - 28 : 91 : function supportsInterface(bytes4 interfaceId) - 29 : : public - 30 : : view - 31 : : virtual - 32 : : override(AccessControlEnumerable, RuleBlacklistBase) - 33 : : returns (bool) - 34 : : { - 35 : 91 : return AccessControlEnumerable.supportsInterface(interfaceId) - 36 : 61 : || RuleBlacklistBase.supportsInterface(interfaceId); - 37 : : } - 38 : : - 39 : 28 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} - 40 : : - 41 : 1 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : PUBLIC FUNCTIONS + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : 91 : function supportsInterface(bytes4 interfaceId) + 33 : : public + 34 : : view + 35 : : virtual + 36 : : override(AccessControlEnumerable, RuleBlacklistBase) + 37 : : returns (bool) + 38 : : { + 39 : 91 : return AccessControlEnumerable.supportsInterface(interfaceId) + 40 : 61 : || RuleBlacklistBase.supportsInterface(interfaceId); + 41 : : } 42 : : - 43 : 83 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 44 : 83 : return super._msgSender(); - 45 : : } + 43 : : /*////////////////////////////////////////////////////////////// + 44 : : ACCESS CONTROL + 45 : : //////////////////////////////////////////////////////////////*/ 46 : : - 47 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 48 : 1 : return super._msgData(); - 49 : : } + 47 : 28 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + 48 : : + 49 : 1 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} 50 : : - 51 : 84 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 52 : 84 : return super._contextSuffixLength(); - 53 : : } - 54 : : } + 51 : : /*////////////////////////////////////////////////////////////// + 52 : : INTERNAL FUNCTIONS + 53 : : //////////////////////////////////////////////////////////////*/ + 54 : : + 55 : 83 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 56 : 83 : return super._msgSender(); + 57 : : } + 58 : : + 59 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 60 : 1 : return super._msgData(); + 61 : : } + 62 : : + 63 : 84 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 64 : 84 : return super._contextSuffixLength(); + 65 : : } + 66 : : } @@ -130,7 +142,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html index 8d61702..b60d6f1 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleBlacklistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklistOwnable2Step._msgDataRuleBlacklistOwnable2Step._msgData 1
RuleBlacklistOwnable2Step._authorizeAddressListAddRuleBlacklistOwnable2Step._authorizeAddressListAdd 2
RuleBlacklistOwnable2Step._authorizeAddressListRemoveRuleBlacklistOwnable2Step._authorizeAddressListRemove 2
RuleBlacklistOwnable2Step._msgSenderRuleBlacklistOwnable2Step._msgSender 12
RuleBlacklistOwnable2Step._contextSuffixLengthRuleBlacklistOwnable2Step._contextSuffixLength 13

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func.html index ad84a28..bc36b87 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleBlacklistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleBlacklistOwnable2Step._authorizeAddressListAddRuleBlacklistOwnable2Step._authorizeAddressListAdd 2
RuleBlacklistOwnable2Step._authorizeAddressListRemoveRuleBlacklistOwnable2Step._authorizeAddressListRemove 2
RuleBlacklistOwnable2Step._contextSuffixLengthRuleBlacklistOwnable2Step._contextSuffixLength 13
RuleBlacklistOwnable2Step._msgDataRuleBlacklistOwnable2Step._msgData 1
RuleBlacklistOwnable2Step._msgSenderRuleBlacklistOwnable2Step._msgSender 12

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.gcov.html similarity index 69% rename from doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.gcov.html index 64af672..c82933f 100644 --- a/doc/coverage/coverage/deployment/RuleBlacklistOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleBlacklistOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleBlacklistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleBlacklistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
@@ -72,9 +72,9 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {RuleBlacklistBase} from "../abstract/base/RuleBlacklistBase.sol"; 8 : : import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; 9 : : @@ -83,24 +83,36 @@ 12 : : * @notice Ownable2Step variant of RuleBlacklist with owner-based authorization hooks. 13 : : */ 14 : : contract RuleBlacklistOwnable2Step is RuleBlacklistBase, Ownable2Step { - 15 : : constructor(address owner, address forwarderIrrevocable) RuleBlacklistBase(forwarderIrrevocable) Ownable(owner) {} - 16 : : - 17 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + 15 : : /*////////////////////////////////////////////////////////////// + 16 : : CONSTRUCTOR + 17 : : //////////////////////////////////////////////////////////////*/ 18 : : - 19 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + 19 : : constructor(address owner, address forwarderIrrevocable) RuleBlacklistBase(forwarderIrrevocable) Ownable(owner) {} 20 : : - 21 : 12 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 22 : 12 : return super._msgSender(); - 23 : : } + 21 : : /*////////////////////////////////////////////////////////////// + 22 : : ACCESS CONTROL + 23 : : //////////////////////////////////////////////////////////////*/ 24 : : - 25 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 26 : 1 : return super._msgData(); - 27 : : } + 25 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + 26 : : + 27 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} 28 : : - 29 : 13 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 30 : 13 : return super._contextSuffixLength(); - 31 : : } - 32 : : } + 29 : : /*////////////////////////////////////////////////////////////// + 30 : : INTERNAL FUNCTIONS + 31 : : //////////////////////////////////////////////////////////////*/ + 32 : : + 33 : 12 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 34 : 12 : return super._msgSender(); + 35 : : } + 36 : : + 37 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 38 : 1 : return super._msgData(); + 39 : : } + 40 : : + 41 : 13 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 42 : 13 : return super._contextSuffixLength(); + 43 : : } + 44 : : } @@ -108,7 +120,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleERC2980.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func-sort-c.html index 0271b40..bb5cee0 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,58 +53,58 @@ - +
Current view:top level - deployment - RuleERC2980.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 80 -
- - + + - + - + - + - + - + - - + + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980._msgDataRuleERC2980._msgData 1
RuleERC2980.supportsInterfaceRuleERC2980.supportsInterface 1
RuleERC2980._authorizeFrozenlistRemoveRuleERC2980._authorizeFrozenlistRemove 7
RuleERC2980._authorizeWhitelistRemoveRuleERC2980._authorizeWhitelistRemove 8
RuleERC2980._authorizeFrozenlistAddRuleERC2980._authorizeFrozenlistAdd 22
RuleERC2980._authorizeWhitelistAdd42RuleERC2980._authorizeWhitelistAdd44
RuleERC2980._msgSender237RuleERC2980._msgSender242
RuleERC2980._contextSuffixLength238RuleERC2980._contextSuffixLength243

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleERC2980.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func.html index d1fa5b1..fa45b3d 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,58 +53,58 @@ - +
Current view:top level - deployment - RuleERC2980.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 80 -
- - + + - + - + - - + + - + - - + + - + - - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980._authorizeFrozenlistAddRuleERC2980._authorizeFrozenlistAdd 22
RuleERC2980._authorizeFrozenlistRemoveRuleERC2980._authorizeFrozenlistRemove 7
RuleERC2980._authorizeWhitelistAdd42RuleERC2980._authorizeWhitelistAdd44
RuleERC2980._authorizeWhitelistRemoveRuleERC2980._authorizeWhitelistRemove 8
RuleERC2980._contextSuffixLength238RuleERC2980._contextSuffixLength243
RuleERC2980._msgDataRuleERC2980._msgData 1
RuleERC2980._msgSender237RuleERC2980._msgSender242
RuleERC2980.supportsInterfaceRuleERC2980.supportsInterface 1

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.gcov.html similarity index 84% rename from doc/coverage/coverage/deployment/RuleERC2980.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.gcov.html index 5863a7a..682d2d2 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleERC2980.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 80 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 5 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 5 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 6 : : /* ==== Abstract contracts === */ 7 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 8 : : import {RuleERC2980Base} from "../abstract/base/RuleERC2980Base.sol"; @@ -108,50 +108,55 @@ 37 : : /** 38 : : * @param admin Address that receives `DEFAULT_ADMIN_ROLE` (implicitly holds all roles). 39 : : * @param forwarderIrrevocable Address of the ERC-2771 forwarder for meta-transactions. - 40 : : */ - 41 : : constructor(address admin, address forwarderIrrevocable) - 42 : : RuleERC2980Base(forwarderIrrevocable) - 43 : : AccessControlModuleStandalone(admin) - 44 : : {} - 45 : : - 46 : : /*////////////////////////////////////////////////////////////// - 47 : : INTERFACE SUPPORT - 48 : : //////////////////////////////////////////////////////////////*/ - 49 : : - 50 : 1 : function supportsInterface(bytes4 interfaceId) - 51 : : public - 52 : : view - 53 : : virtual - 54 : : override(AccessControlEnumerable, RuleERC2980Base) - 55 : : returns (bool) - 56 : : { - 57 : 1 : return AccessControlEnumerable.supportsInterface(interfaceId) || RuleERC2980Base.supportsInterface(interfaceId); - 58 : : } - 59 : : - 60 : : /*////////////////////////////////////////////////////////////// - 61 : : ACCESS CONTROL - 62 : : //////////////////////////////////////////////////////////////*/ - 63 : : - 64 : 42 : function _authorizeWhitelistAdd() internal view virtual override onlyRole(WHITELIST_ADD_ROLE) {} - 65 : : - 66 : 8 : function _authorizeWhitelistRemove() internal view virtual override onlyRole(WHITELIST_REMOVE_ROLE) {} - 67 : : - 68 : 22 : function _authorizeFrozenlistAdd() internal view virtual override onlyRole(FROZENLIST_ADD_ROLE) {} - 69 : : - 70 : 7 : function _authorizeFrozenlistRemove() internal view virtual override onlyRole(FROZENLIST_REMOVE_ROLE) {} - 71 : : - 72 : 237 : function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { - 73 : 237 : return super._msgSender(); - 74 : : } - 75 : : - 76 : 1 : function _msgData() internal view virtual override(Context, RuleERC2980Base) returns (bytes calldata) { - 77 : 1 : return super._msgData(); - 78 : : } - 79 : : - 80 : 238 : function _contextSuffixLength() internal view virtual override(Context, RuleERC2980Base) returns (uint256) { - 81 : 238 : return super._contextSuffixLength(); - 82 : : } - 83 : : } + 40 : : * @param allowBurn If true, whitelists `address(0)` at deployment to allow burn/redemption flows. + 41 : : */ + 42 : : constructor(address admin, address forwarderIrrevocable, bool allowBurn) + 43 : : RuleERC2980Base(forwarderIrrevocable, allowBurn) + 44 : : AccessControlModuleStandalone(admin) + 45 : : {} + 46 : : + 47 : : /*////////////////////////////////////////////////////////////// + 48 : : PUBLIC FUNCTIONS + 49 : : //////////////////////////////////////////////////////////////*/ + 50 : : + 51 : 1 : function supportsInterface(bytes4 interfaceId) + 52 : : public + 53 : : view + 54 : : virtual + 55 : : override(AccessControlEnumerable, RuleERC2980Base) + 56 : : returns (bool) + 57 : : { + 58 : 1 : return AccessControlEnumerable.supportsInterface(interfaceId) || RuleERC2980Base.supportsInterface(interfaceId); + 59 : : } + 60 : : + 61 : : /*////////////////////////////////////////////////////////////// + 62 : : ACCESS CONTROL + 63 : : //////////////////////////////////////////////////////////////*/ + 64 : : + 65 : 44 : function _authorizeWhitelistAdd() internal view virtual override onlyRole(WHITELIST_ADD_ROLE) {} + 66 : : + 67 : 8 : function _authorizeWhitelistRemove() internal view virtual override onlyRole(WHITELIST_REMOVE_ROLE) {} + 68 : : + 69 : 22 : function _authorizeFrozenlistAdd() internal view virtual override onlyRole(FROZENLIST_ADD_ROLE) {} + 70 : : + 71 : 7 : function _authorizeFrozenlistRemove() internal view virtual override onlyRole(FROZENLIST_REMOVE_ROLE) {} + 72 : : + 73 : : /*////////////////////////////////////////////////////////////// + 74 : : INTERNAL FUNCTIONS + 75 : : //////////////////////////////////////////////////////////////*/ + 76 : : + 77 : 242 : function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { + 78 : 242 : return super._msgSender(); + 79 : : } + 80 : : + 81 : 1 : function _msgData() internal view virtual override(Context, RuleERC2980Base) returns (bytes calldata) { + 82 : 1 : return super._msgData(); + 83 : : } + 84 : : + 85 : 243 : function _contextSuffixLength() internal view virtual override(Context, RuleERC2980Base) returns (uint256) { + 86 : 243 : return super._contextSuffixLength(); + 87 : : } + 88 : : } @@ -159,7 +164,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html index 7c235e2..5d34555 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980Ownable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980Ownable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,54 +53,54 @@ - +
Current view:top level - deployment - RuleERC2980Ownable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980Ownable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
- - + + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Ownable2Step._msgDataRuleERC2980Ownable2Step._msgData 1
RuleERC2980Ownable2Step._authorizeFrozenlistRemoveRuleERC2980Ownable2Step._authorizeFrozenlistRemove 2
RuleERC2980Ownable2Step._authorizeWhitelistRemoveRuleERC2980Ownable2Step._authorizeWhitelistRemove 3
RuleERC2980Ownable2Step._authorizeFrozenlistAddRuleERC2980Ownable2Step._authorizeFrozenlistAdd 6
RuleERC2980Ownable2Step._authorizeWhitelistAddRuleERC2980Ownable2Step._authorizeWhitelistAdd 7
RuleERC2980Ownable2Step._msgSenderRuleERC2980Ownable2Step._msgSender 30
RuleERC2980Ownable2Step._contextSuffixLengthRuleERC2980Ownable2Step._contextSuffixLength 31

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func.html index b329d9c..815c45e 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980Ownable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980Ownable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,54 +53,54 @@ - +
Current view:top level - deployment - RuleERC2980Ownable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980Ownable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
- - + + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleERC2980Ownable2Step._authorizeFrozenlistAddRuleERC2980Ownable2Step._authorizeFrozenlistAdd 6
RuleERC2980Ownable2Step._authorizeFrozenlistRemoveRuleERC2980Ownable2Step._authorizeFrozenlistRemove 2
RuleERC2980Ownable2Step._authorizeWhitelistAddRuleERC2980Ownable2Step._authorizeWhitelistAdd 7
RuleERC2980Ownable2Step._authorizeWhitelistRemoveRuleERC2980Ownable2Step._authorizeWhitelistRemove 3
RuleERC2980Ownable2Step._contextSuffixLengthRuleERC2980Ownable2Step._contextSuffixLength 31
RuleERC2980Ownable2Step._msgDataRuleERC2980Ownable2Step._msgData 1
RuleERC2980Ownable2Step._msgSenderRuleERC2980Ownable2Step._msgSender 30

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.gcov.html similarity index 64% rename from doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.gcov.html index fdb8ffe..a03e0c3 100644 --- a/doc/coverage/coverage/deployment/RuleERC2980Ownable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleERC2980Ownable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleERC2980Ownable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleERC2980Ownable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleERC2980Ownable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
@@ -72,9 +72,9 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {RuleERC2980Base} from "../abstract/base/RuleERC2980Base.sol"; 8 : : 9 : : /** @@ -83,28 +83,48 @@ 12 : : * @dev All whitelist and frozenlist management functions are restricted to the contract owner. 13 : : */ 14 : : contract RuleERC2980Ownable2Step is RuleERC2980Base, Ownable2Step { - 15 : : constructor(address owner, address forwarderIrrevocable) RuleERC2980Base(forwarderIrrevocable) Ownable(owner) {} - 16 : : - 17 : 7 : function _authorizeWhitelistAdd() internal view virtual override onlyOwner {} + 15 : : /*////////////////////////////////////////////////////////////// + 16 : : CONSTRUCTOR + 17 : : //////////////////////////////////////////////////////////////*/ 18 : : - 19 : 3 : function _authorizeWhitelistRemove() internal view virtual override onlyOwner {} - 20 : : - 21 : 6 : function _authorizeFrozenlistAdd() internal view virtual override onlyOwner {} - 22 : : - 23 : 2 : function _authorizeFrozenlistRemove() internal view virtual override onlyOwner {} - 24 : : - 25 : 30 : function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { - 26 : 30 : return super._msgSender(); - 27 : : } + 19 : : /** + 20 : : * @param owner Contract owner. + 21 : : * @param forwarderIrrevocable Address of the ERC-2771 forwarder for meta-transactions. + 22 : : * @param allowBurn If true, whitelists `address(0)` at deployment to allow burn/redemption flows. + 23 : : */ + 24 : : constructor(address owner, address forwarderIrrevocable, bool allowBurn) + 25 : : RuleERC2980Base(forwarderIrrevocable, allowBurn) + 26 : : Ownable(owner) + 27 : : {} 28 : : - 29 : 1 : function _msgData() internal view virtual override(Context, RuleERC2980Base) returns (bytes calldata) { - 30 : 1 : return super._msgData(); - 31 : : } + 29 : : /*////////////////////////////////////////////////////////////// + 30 : : ACCESS CONTROL + 31 : : //////////////////////////////////////////////////////////////*/ 32 : : - 33 : 31 : function _contextSuffixLength() internal view virtual override(Context, RuleERC2980Base) returns (uint256) { - 34 : 31 : return super._contextSuffixLength(); - 35 : : } - 36 : : } + 33 : 7 : function _authorizeWhitelistAdd() internal view virtual override onlyOwner {} + 34 : : + 35 : 3 : function _authorizeWhitelistRemove() internal view virtual override onlyOwner {} + 36 : : + 37 : 6 : function _authorizeFrozenlistAdd() internal view virtual override onlyOwner {} + 38 : : + 39 : 2 : function _authorizeFrozenlistRemove() internal view virtual override onlyOwner {} + 40 : : + 41 : : /*////////////////////////////////////////////////////////////// + 42 : : INTERNAL FUNCTIONS + 43 : : //////////////////////////////////////////////////////////////*/ + 44 : : + 45 : 30 : function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { + 46 : 30 : return super._msgSender(); + 47 : : } + 48 : : + 49 : 1 : function _msgData() internal view virtual override(Context, RuleERC2980Base) returns (bytes calldata) { + 50 : 1 : return super._msgData(); + 51 : : } + 52 : : + 53 : 31 : function _contextSuffixLength() internal view virtual override(Context, RuleERC2980Base) returns (uint256) { + 54 : 31 : return super._contextSuffixLength(); + 55 : : } + 56 : : } @@ -112,7 +132,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func-sort-c.html index f448ed3..e38abb4 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistry.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistry.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - deployment - RuleIdentityRegistry.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistry.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
- - + + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistry._authorizeIdentityRegistryManagerRuleIdentityRegistry._authorizeIdentityRegistryManager 5
RuleIdentityRegistry.supportsInterfaceRuleIdentityRegistry.supportsInterface 15

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func.html index 1172c83..e4e938b 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistry.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistry.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - deployment - RuleIdentityRegistry.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistry.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
- - + + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistry._authorizeIdentityRegistryManagerRuleIdentityRegistry._authorizeIdentityRegistryManager 5
RuleIdentityRegistry.supportsInterfaceRuleIdentityRegistry.supportsInterface 15

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.gcov.html similarity index 76% rename from doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.gcov.html index e499690..43031da 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistry.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistry.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistry.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistry.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleIdentityRegistry.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistry.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
@@ -72,7 +72,7 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; 5 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 6 : : import {RuleIdentityRegistryBase} from "../abstract/base/RuleIdentityRegistryBase.sol"; 7 : : import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.sol"; @@ -83,28 +83,36 @@ 12 : : * @dev Burns (to == address(0)) are allowed even if the sender is not verified. 13 : : */ 14 : : contract RuleIdentityRegistry is AccessControlModuleStandalone, RuleIdentityRegistryBase { - 15 : : constructor(address admin, address identityRegistry_) - 16 : : AccessControlModuleStandalone(admin) - 17 : : RuleIdentityRegistryBase(identityRegistry_) - 18 : : {} - 19 : : - 20 : 15 : function supportsInterface(bytes4 interfaceId) - 21 : : public - 22 : : view - 23 : : virtual - 24 : : override(AccessControlEnumerable, RuleTransferValidation) - 25 : : returns (bool) - 26 : : { - 27 : 15 : return AccessControlEnumerable.supportsInterface(interfaceId) - 28 : 10 : || RuleTransferValidation.supportsInterface(interfaceId); - 29 : : } - 30 : : - 31 : : /*////////////////////////////////////////////////////////////// - 32 : : ACCESS CONTROL - 33 : : //////////////////////////////////////////////////////////////*/ - 34 : : - 35 : 5 : function _authorizeIdentityRegistryManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} - 36 : : } + 15 : : /*////////////////////////////////////////////////////////////// + 16 : : CONSTRUCTOR + 17 : : //////////////////////////////////////////////////////////////*/ + 18 : : + 19 : : constructor(address admin, address identityRegistry_) + 20 : : AccessControlModuleStandalone(admin) + 21 : : RuleIdentityRegistryBase(identityRegistry_) + 22 : : {} + 23 : : + 24 : : /*////////////////////////////////////////////////////////////// + 25 : : PUBLIC FUNCTIONS + 26 : : //////////////////////////////////////////////////////////////*/ + 27 : : + 28 : 15 : function supportsInterface(bytes4 interfaceId) + 29 : : public + 30 : : view + 31 : : virtual + 32 : : override(AccessControlEnumerable, RuleTransferValidation) + 33 : : returns (bool) + 34 : : { + 35 : 15 : return AccessControlEnumerable.supportsInterface(interfaceId) + 36 : 10 : || RuleTransferValidation.supportsInterface(interfaceId); + 37 : : } + 38 : : + 39 : : /*////////////////////////////////////////////////////////////// + 40 : : ACCESS CONTROL + 41 : : //////////////////////////////////////////////////////////////*/ + 42 : : + 43 : 5 : function _authorizeIdentityRegistryManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + 44 : : } @@ -112,7 +120,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html index f40a018..44bdad9 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistryOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManagerRuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManager 4

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html index 21fdc8e..32ae128 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistryOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManagerRuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManager 4

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html similarity index 65% rename from doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html index b350cb4..f79424b 100644 --- a/doc/coverage/coverage/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleIdentityRegistryOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleIdentityRegistryOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; 6 : : import {RuleIdentityRegistryBase} from "../abstract/base/RuleIdentityRegistryBase.sol"; 7 : : 8 : : /** @@ -81,10 +81,18 @@ 10 : : * @notice Ownable2Step variant of RuleIdentityRegistry. 11 : : */ 12 : : contract RuleIdentityRegistryOwnable2Step is RuleIdentityRegistryBase, Ownable2Step { - 13 : : constructor(address owner, address identityRegistry_) RuleIdentityRegistryBase(identityRegistry_) Ownable(owner) {} - 14 : : - 15 : 4 : function _authorizeIdentityRegistryManager() internal view virtual override onlyOwner {} - 16 : : } + 13 : : /*////////////////////////////////////////////////////////////// + 14 : : CONSTRUCTOR + 15 : : //////////////////////////////////////////////////////////////*/ + 16 : : + 17 : : constructor(address owner, address identityRegistry_) RuleIdentityRegistryBase(identityRegistry_) Ownable(owner) {} + 18 : : + 19 : : /*////////////////////////////////////////////////////////////// + 20 : : ACCESS CONTROL + 21 : : //////////////////////////////////////////////////////////////*/ + 22 : : + 23 : 4 : function _authorizeIdentityRegistryManager() internal view virtual override onlyOwner {} + 24 : : } @@ -92,7 +100,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func-sort-c.html index 571c96e..22fac2c 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupply.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupply.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - deployment - RuleMaxTotalSupply.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupply.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
- - + + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupply.supportsInterfaceRuleMaxTotalSupply.supportsInterface 15
RuleMaxTotalSupply._authorizeMaxTotalSupplyManagerRuleMaxTotalSupply._authorizeMaxTotalSupplyManager 260

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func.html index 90f36b1..a16bd35 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupply.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupply.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,34 +53,34 @@ - +
Current view:top level - deployment - RuleMaxTotalSupply.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupply.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
- - + + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupply._authorizeMaxTotalSupplyManagerRuleMaxTotalSupply._authorizeMaxTotalSupplyManager 260
RuleMaxTotalSupply.supportsInterfaceRuleMaxTotalSupply.supportsInterface 15

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.gcov.html similarity index 78% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.gcov.html index 5196e15..554acc8 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupply.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupply.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupply.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupply.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleMaxTotalSupply.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupply.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 20 -
@@ -72,7 +72,7 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; 5 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 6 : : import {RuleMaxTotalSupplyBase} from "../abstract/base/RuleMaxTotalSupplyBase.sol"; 7 : : import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.sol"; @@ -82,33 +82,41 @@ 11 : : * @notice Restricts minting so that total supply never exceeds a maximum value. 12 : : */ 13 : : contract RuleMaxTotalSupply is AccessControlModuleStandalone, RuleMaxTotalSupplyBase { - 14 : : /** - 15 : : * @param admin Address that receives the default admin role. - 16 : : * @param tokenContract_ Token contract that exposes totalSupply (must be non-zero). - 17 : : * @param maxTotalSupply_ Initial maximum supply. - 18 : : */ - 19 : : constructor(address admin, address tokenContract_, uint256 maxTotalSupply_) - 20 : : AccessControlModuleStandalone(admin) - 21 : : RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) - 22 : : {} - 23 : : - 24 : 15 : function supportsInterface(bytes4 interfaceId) - 25 : : public - 26 : : view - 27 : : virtual - 28 : : override(AccessControlEnumerable, RuleTransferValidation) - 29 : : returns (bool) - 30 : : { - 31 : 15 : return AccessControlEnumerable.supportsInterface(interfaceId) - 32 : 10 : || RuleTransferValidation.supportsInterface(interfaceId); - 33 : : } - 34 : : - 35 : : /*////////////////////////////////////////////////////////////// - 36 : : ACCESS CONTROL - 37 : : //////////////////////////////////////////////////////////////*/ - 38 : : - 39 : 260 : function _authorizeMaxTotalSupplyManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} - 40 : : } + 14 : : /*////////////////////////////////////////////////////////////// + 15 : : CONSTRUCTOR + 16 : : //////////////////////////////////////////////////////////////*/ + 17 : : + 18 : : /** + 19 : : * @param admin Address that receives the default admin role. + 20 : : * @param tokenContract_ Token contract that exposes totalSupply (must be non-zero). + 21 : : * @param maxTotalSupply_ Initial maximum supply. + 22 : : */ + 23 : : constructor(address admin, address tokenContract_, uint256 maxTotalSupply_) + 24 : : AccessControlModuleStandalone(admin) + 25 : : RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) + 26 : : {} + 27 : : + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : PUBLIC FUNCTIONS + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : 15 : function supportsInterface(bytes4 interfaceId) + 33 : : public + 34 : : view + 35 : : virtual + 36 : : override(AccessControlEnumerable, RuleTransferValidation) + 37 : : returns (bool) + 38 : : { + 39 : 15 : return AccessControlEnumerable.supportsInterface(interfaceId) + 40 : 10 : || RuleTransferValidation.supportsInterface(interfaceId); + 41 : : } + 42 : : + 43 : : /*////////////////////////////////////////////////////////////// + 44 : : ACCESS CONTROL + 45 : : //////////////////////////////////////////////////////////////*/ + 46 : : + 47 : 260 : function _authorizeMaxTotalSupplyManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + 48 : : } @@ -116,7 +124,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html index 8fa5655..40d1ef8 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupplyOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManagerRuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManager 4

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html index d7388aa..8f80584 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupplyOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,30 +53,30 @@ - +
Current view:top level - deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
- - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManagerRuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManager 4

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html index bedeb3e..9bef84f 100644 --- a/doc/coverage/coverage/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleMaxTotalSupplyOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleMaxTotalSupplyOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 10 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; 6 : : import {RuleMaxTotalSupplyBase} from "../abstract/base/RuleMaxTotalSupplyBase.sol"; 7 : : 8 : : /** @@ -81,13 +81,21 @@ 10 : : * @notice Ownable2Step variant of RuleMaxTotalSupply. 11 : : */ 12 : : contract RuleMaxTotalSupplyOwnable2Step is RuleMaxTotalSupplyBase, Ownable2Step { - 13 : : constructor(address owner, address tokenContract_, uint256 maxTotalSupply_) - 14 : : RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) - 15 : : Ownable(owner) - 16 : : {} - 17 : : - 18 : 4 : function _authorizeMaxTotalSupplyManager() internal view virtual override onlyOwner {} - 19 : : } + 13 : : /*////////////////////////////////////////////////////////////// + 14 : : CONSTRUCTOR + 15 : : //////////////////////////////////////////////////////////////*/ + 16 : : + 17 : : constructor(address owner, address tokenContract_, uint256 maxTotalSupply_) + 18 : : RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) + 19 : : Ownable(owner) + 20 : : {} + 21 : : + 22 : : /*////////////////////////////////////////////////////////////// + 23 : : ACCESS CONTROL + 24 : : //////////////////////////////////////////////////////////////*/ + 25 : : + 26 : 4 : function _authorizeMaxTotalSupplyManager() internal view virtual override onlyOwner {} + 27 : : } @@ -95,7 +103,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleSanctionsList.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func-sort-c.html index 24e6345..97f8b5e 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsList.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsList.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleSanctionsList.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsList.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsList._msgDataRuleSanctionsList._msgData 1
RuleSanctionsList._authorizeSanctionListManagerRuleSanctionsList._authorizeSanctionListManager 17
RuleSanctionsList._msgSenderRuleSanctionsList._msgSender 57
RuleSanctionsList._contextSuffixLengthRuleSanctionsList._contextSuffixLength 58
RuleSanctionsList.supportsInterfaceRuleSanctionsList.supportsInterface 58

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleSanctionsList.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func.html index 3312a7b..3bfcb8d 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsList.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsList.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleSanctionsList.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsList.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsList._authorizeSanctionListManagerRuleSanctionsList._authorizeSanctionListManager 17
RuleSanctionsList._contextSuffixLengthRuleSanctionsList._contextSuffixLength 58
RuleSanctionsList._msgDataRuleSanctionsList._msgData 1
RuleSanctionsList._msgSenderRuleSanctionsList._msgSender 57
RuleSanctionsList.supportsInterfaceRuleSanctionsList.supportsInterface 58

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.gcov.html similarity index 81% rename from doc/coverage/coverage/deployment/RuleSanctionsList.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.gcov.html index 3a79c33..c0e638d 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsList.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsList.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsList.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsList.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleSanctionsList.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsList.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 5 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 5 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 6 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 7 : : import {ERC2771Context} from "../../../modules/MetaTxModuleStandalone.sol"; 8 : : import {RuleSanctionsListBase} from "../abstract/base/RuleSanctionsListBase.sol"; @@ -85,48 +85,56 @@ 14 : : * @notice Compliance rule enforcing sanctions-screening for token transfers. 15 : : */ 16 : : contract RuleSanctionsList is AccessControlModuleStandalone, RuleSanctionsListBase { - 17 : : /** - 18 : : * @param admin Address of the contract (Access Control) - 19 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support - 20 : : */ - 21 : : constructor(address admin, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) - 22 : : AccessControlModuleStandalone(admin) - 23 : : RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) - 24 : : {} - 25 : : - 26 : 58 : function supportsInterface(bytes4 interfaceId) - 27 : : public - 28 : : view - 29 : : virtual - 30 : : override(AccessControlEnumerable, RuleTransferValidation) - 31 : : returns (bool) - 32 : : { - 33 : 58 : return AccessControlEnumerable.supportsInterface(interfaceId) - 34 : 39 : || RuleTransferValidation.supportsInterface(interfaceId); - 35 : : } - 36 : : - 37 : : /*////////////////////////////////////////////////////////////// - 38 : : ACCESS CONTROL - 39 : : //////////////////////////////////////////////////////////////*/ - 40 : : - 41 : 17 : function _authorizeSanctionListManager() internal view virtual override onlyRole(SANCTIONLIST_ROLE) {} - 42 : : - 43 : : /*////////////////////////////////////////////////////////////// - 44 : : ERC-2771 - 45 : : //////////////////////////////////////////////////////////////*/ - 46 : : - 47 : 57 : function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { - 48 : 57 : return ERC2771Context._msgSender(); - 49 : : } + 17 : : /*////////////////////////////////////////////////////////////// + 18 : : CONSTRUCTOR + 19 : : //////////////////////////////////////////////////////////////*/ + 20 : : + 21 : : /** + 22 : : * @param admin Address of the contract (Access Control) + 23 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support + 24 : : */ + 25 : : constructor(address admin, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) + 26 : : AccessControlModuleStandalone(admin) + 27 : : RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) + 28 : : {} + 29 : : + 30 : : /*////////////////////////////////////////////////////////////// + 31 : : PUBLIC FUNCTIONS + 32 : : //////////////////////////////////////////////////////////////*/ + 33 : : + 34 : 58 : function supportsInterface(bytes4 interfaceId) + 35 : : public + 36 : : view + 37 : : virtual + 38 : : override(AccessControlEnumerable, RuleTransferValidation) + 39 : : returns (bool) + 40 : : { + 41 : 58 : return AccessControlEnumerable.supportsInterface(interfaceId) + 42 : 39 : || RuleTransferValidation.supportsInterface(interfaceId); + 43 : : } + 44 : : + 45 : : /*////////////////////////////////////////////////////////////// + 46 : : ACCESS CONTROL + 47 : : //////////////////////////////////////////////////////////////*/ + 48 : : + 49 : 17 : function _authorizeSanctionListManager() internal view virtual override onlyRole(SANCTIONLIST_ROLE) {} 50 : : - 51 : 1 : function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { - 52 : 1 : return ERC2771Context._msgData(); - 53 : : } + 51 : : /*////////////////////////////////////////////////////////////// + 52 : : INTERNAL FUNCTIONS + 53 : : //////////////////////////////////////////////////////////////*/ 54 : : - 55 : 58 : function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { - 56 : 58 : return ERC2771Context._contextSuffixLength(); + 55 : 57 : function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { + 56 : 57 : return ERC2771Context._msgSender(); 57 : : } - 58 : : } + 58 : : + 59 : 1 : function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { + 60 : 1 : return ERC2771Context._msgData(); + 61 : : } + 62 : : + 63 : 58 : function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { + 64 : 58 : return ERC2771Context._contextSuffixLength(); + 65 : : } + 66 : : } @@ -134,7 +142,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html index b5c05d7..3da8d95 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsListOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,42 +53,42 @@ - +
Current view:top level - deployment - RuleSanctionsListOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsListOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 40 -
- - + + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsListOwnable2Step._msgDataRuleSanctionsListOwnable2Step._msgData 1
RuleSanctionsListOwnable2Step._authorizeSanctionListManagerRuleSanctionsListOwnable2Step._authorizeSanctionListManager 3
RuleSanctionsListOwnable2Step._msgSenderRuleSanctionsListOwnable2Step._msgSender 11
RuleSanctionsListOwnable2Step._contextSuffixLengthRuleSanctionsListOwnable2Step._contextSuffixLength 13

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func.html index 58d44b3..a525d43 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsListOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,42 +53,42 @@ - +
Current view:top level - deployment - RuleSanctionsListOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsListOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 40 -
- - + + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSanctionsListOwnable2Step._authorizeSanctionListManagerRuleSanctionsListOwnable2Step._authorizeSanctionListManager 3
RuleSanctionsListOwnable2Step._contextSuffixLengthRuleSanctionsListOwnable2Step._contextSuffixLength 13
RuleSanctionsListOwnable2Step._msgDataRuleSanctionsListOwnable2Step._msgData 1
RuleSanctionsListOwnable2Step._msgSenderRuleSanctionsListOwnable2Step._msgSender 11

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html similarity index 70% rename from doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html index be60669..9b53258 100644 --- a/doc/coverage/coverage/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSanctionsListOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleSanctionsListOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSanctionsListOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 40 -
@@ -72,9 +72,9 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {ERC2771Context} from "../../../modules/MetaTxModuleStandalone.sol"; 8 : : import {RuleSanctionsListBase} from "../abstract/base/RuleSanctionsListBase.sol"; 9 : : import {ISanctionsList} from "../../interfaces/ISanctionsList.sol"; @@ -84,25 +84,37 @@ 13 : : * @notice Ownable2Step variant of RuleSanctionsList. 14 : : */ 15 : : contract RuleSanctionsListOwnable2Step is RuleSanctionsListBase, Ownable2Step { - 16 : : constructor(address owner, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) - 17 : : RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) - 18 : : Ownable(owner) - 19 : : {} - 20 : : - 21 : 3 : function _authorizeSanctionListManager() internal view virtual override onlyOwner {} - 22 : : - 23 : 11 : function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { - 24 : 11 : return ERC2771Context._msgSender(); - 25 : : } - 26 : : - 27 : 1 : function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { - 28 : 1 : return ERC2771Context._msgData(); - 29 : : } + 16 : : /*////////////////////////////////////////////////////////////// + 17 : : CONSTRUCTOR + 18 : : //////////////////////////////////////////////////////////////*/ + 19 : : + 20 : : constructor(address owner, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) + 21 : : RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) + 22 : : Ownable(owner) + 23 : : {} + 24 : : + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : ACCESS CONTROL + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : + 29 : 3 : function _authorizeSanctionListManager() internal view virtual override onlyOwner {} 30 : : - 31 : 13 : function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { - 32 : 13 : return ERC2771Context._contextSuffixLength(); - 33 : : } - 34 : : } + 31 : : /*////////////////////////////////////////////////////////////// + 32 : : INTERNAL FUNCTIONS + 33 : : //////////////////////////////////////////////////////////////*/ + 34 : : + 35 : 11 : function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { + 36 : 11 : return ERC2771Context._msgSender(); + 37 : : } + 38 : : + 39 : 1 : function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { + 40 : 1 : return ERC2771Context._msgData(); + 41 : : } + 42 : : + 43 : 13 : function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { + 44 : 13 : return ERC2771Context._contextSuffixLength(); + 45 : : } + 46 : : } @@ -110,7 +122,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func-sort-c.html index ae631c7..07e51e2 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleSpenderWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - - + + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelist._msgDataRuleSpenderWhitelist._msgData 1
RuleSpenderWhitelist._authorizeAddressListRemoveRuleSpenderWhitelist._authorizeAddressListRemove 2
RuleSpenderWhitelist.supportsInterface2RuleSpenderWhitelist.supportsInterface5
RuleSpenderWhitelist._authorizeAddressListAddRuleSpenderWhitelist._authorizeAddressListAdd 6
RuleSpenderWhitelist._msgSenderRuleSpenderWhitelist._msgSender 31
RuleSpenderWhitelist._contextSuffixLengthRuleSpenderWhitelist._contextSuffixLength 33

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func.html index e4dd2af..8028e78 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleSpenderWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - + - + - + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelist._authorizeAddressListAddRuleSpenderWhitelist._authorizeAddressListAdd 6
RuleSpenderWhitelist._authorizeAddressListRemoveRuleSpenderWhitelist._authorizeAddressListRemove 2
RuleSpenderWhitelist._contextSuffixLengthRuleSpenderWhitelist._contextSuffixLength 33
RuleSpenderWhitelist._msgDataRuleSpenderWhitelist._msgData 1
RuleSpenderWhitelist._msgSenderRuleSpenderWhitelist._msgSender 31
RuleSpenderWhitelist.supportsInterface2RuleSpenderWhitelist.supportsInterface5

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.gcov.html similarity index 70% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.gcov.html index a008bd9..d9dd156 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelist.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelist.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelist.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelist.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleSpenderWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 5 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 5 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 6 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 7 : : import {RuleSpenderWhitelistBase} from "../abstract/base/RuleSpenderWhitelistBase.sol"; 8 : : import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; @@ -84,38 +84,54 @@ 13 : : * @notice AccessControlEnumerable deployment variant of spender whitelist rule. 14 : : */ 15 : : contract RuleSpenderWhitelist is RuleSpenderWhitelistBase, AccessControlModuleStandalone { - 16 : : constructor(address admin, address forwarderIrrevocable) - 17 : : RuleSpenderWhitelistBase(forwarderIrrevocable) - 18 : : AccessControlModuleStandalone(admin) - 19 : : {} - 20 : : - 21 : 2 : function supportsInterface(bytes4 interfaceId) - 22 : : public - 23 : : view - 24 : : virtual - 25 : : override(AccessControlEnumerable, RuleTransferValidation) - 26 : : returns (bool) - 27 : : { - 28 : 2 : return AccessControlEnumerable.supportsInterface(interfaceId) - 29 : 1 : || RuleTransferValidation.supportsInterface(interfaceId); - 30 : : } - 31 : : - 32 : 6 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} - 33 : : - 34 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} - 35 : : - 36 : 31 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 37 : 31 : return super._msgSender(); + 16 : : /*////////////////////////////////////////////////////////////// + 17 : : CONSTRUCTOR + 18 : : //////////////////////////////////////////////////////////////*/ + 19 : : + 20 : : constructor(address admin, address forwarderIrrevocable) + 21 : : RuleSpenderWhitelistBase(forwarderIrrevocable) + 22 : : AccessControlModuleStandalone(admin) + 23 : : {} + 24 : : + 25 : : /*////////////////////////////////////////////////////////////// + 26 : : PUBLIC FUNCTIONS + 27 : : //////////////////////////////////////////////////////////////*/ + 28 : : + 29 : 5 : function supportsInterface(bytes4 interfaceId) + 30 : : public + 31 : : view + 32 : : virtual + 33 : : override(AccessControlEnumerable, RuleTransferValidation) + 34 : : returns (bool) + 35 : : { + 36 : 5 : return AccessControlEnumerable.supportsInterface(interfaceId) + 37 : 4 : || RuleTransferValidation.supportsInterface(interfaceId); 38 : : } 39 : : - 40 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 41 : 1 : return super._msgData(); - 42 : : } + 40 : : /*////////////////////////////////////////////////////////////// + 41 : : ACCESS CONTROL + 42 : : //////////////////////////////////////////////////////////////*/ 43 : : - 44 : 33 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 45 : 33 : return super._contextSuffixLength(); - 46 : : } - 47 : : } + 44 : 6 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + 45 : : + 46 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + 47 : : + 48 : : /*////////////////////////////////////////////////////////////// + 49 : : INTERNAL FUNCTIONS + 50 : : //////////////////////////////////////////////////////////////*/ + 51 : : + 52 : 31 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 53 : 31 : return super._msgSender(); + 54 : : } + 55 : : + 56 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 57 : 1 : return super._msgData(); + 58 : : } + 59 : : + 60 : 33 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 61 : 33 : return super._contextSuffixLength(); + 62 : : } + 63 : : } @@ -123,7 +139,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html similarity index 68% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html index 3b72524..c10953b 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelistOwnable2Step._msgDataRuleSpenderWhitelistOwnable2Step._msgData 1
RuleSpenderWhitelistOwnable2Step._authorizeAddressListAddRuleSpenderWhitelistOwnable2Step._authorizeAddressListAdd 2
RuleSpenderWhitelistOwnable2Step._authorizeAddressListRemoveRuleSpenderWhitelistOwnable2Step._authorizeAddressListRemove 2
RuleSpenderWhitelistOwnable2Step._msgSenderRuleSpenderWhitelistOwnable2Step._msgSender 10
RuleSpenderWhitelistOwnable2Step._contextSuffixLengthRuleSpenderWhitelistOwnable2Step._contextSuffixLength 12

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html similarity index 68% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html index 1026412..6d0abf0 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleSpenderWhitelistOwnable2Step._authorizeAddressListAddRuleSpenderWhitelistOwnable2Step._authorizeAddressListAdd 2
RuleSpenderWhitelistOwnable2Step._authorizeAddressListRemoveRuleSpenderWhitelistOwnable2Step._authorizeAddressListRemove 2
RuleSpenderWhitelistOwnable2Step._contextSuffixLengthRuleSpenderWhitelistOwnable2Step._contextSuffixLength 12
RuleSpenderWhitelistOwnable2Step._msgDataRuleSpenderWhitelistOwnable2Step._msgData 1
RuleSpenderWhitelistOwnable2Step._msgSenderRuleSpenderWhitelistOwnable2Step._msgSender 10

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html similarity index 70% rename from doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html index 36b3a78..4e5cbf7 100644 --- a/doc/coverage/coverage/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleSpenderWhitelistOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleSpenderWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
@@ -72,9 +72,9 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {RuleSpenderWhitelistBase} from "../abstract/base/RuleSpenderWhitelistBase.sol"; 8 : : import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; 9 : : @@ -83,27 +83,39 @@ 12 : : * @notice Ownable2Step deployment variant of spender whitelist rule. 13 : : */ 14 : : contract RuleSpenderWhitelistOwnable2Step is RuleSpenderWhitelistBase, Ownable2Step { - 15 : : constructor(address owner, address forwarderIrrevocable) - 16 : : RuleSpenderWhitelistBase(forwarderIrrevocable) - 17 : : Ownable(owner) - 18 : : {} - 19 : : - 20 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} - 21 : : - 22 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + 15 : : /*////////////////////////////////////////////////////////////// + 16 : : CONSTRUCTOR + 17 : : //////////////////////////////////////////////////////////////*/ + 18 : : + 19 : : constructor(address owner, address forwarderIrrevocable) + 20 : : RuleSpenderWhitelistBase(forwarderIrrevocable) + 21 : : Ownable(owner) + 22 : : {} 23 : : - 24 : 10 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 25 : 10 : return super._msgSender(); - 26 : : } + 24 : : /*////////////////////////////////////////////////////////////// + 25 : : ACCESS CONTROL + 26 : : //////////////////////////////////////////////////////////////*/ 27 : : - 28 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 29 : 1 : return super._msgData(); - 30 : : } + 28 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + 29 : : + 30 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} 31 : : - 32 : 12 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 33 : 12 : return super._contextSuffixLength(); - 34 : : } - 35 : : } + 32 : : /*////////////////////////////////////////////////////////////// + 33 : : INTERNAL FUNCTIONS + 34 : : //////////////////////////////////////////////////////////////*/ + 35 : : + 36 : 10 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 37 : 10 : return super._msgSender(); + 38 : : } + 39 : : + 40 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 41 : 1 : return super._msgData(); + 42 : : } + 43 : : + 44 : 12 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 45 : 12 : return super._contextSuffixLength(); + 46 : : } + 47 : : } @@ -111,7 +123,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelist.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func-sort-c.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleWhitelist.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func-sort-c.html index 6422f45..fd55174 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelist.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,54 +53,54 @@ - +
Current view:top level - deployment - RuleWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
- - + + - + - + - + - + - + - - + + - - + +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelist._authorizeCheckSpenderManagerRuleWhitelist._authorizeCheckSpenderManager 1
RuleWhitelist._msgDataRuleWhitelist._msgData 1
RuleWhitelist.supportsInterfaceRuleWhitelist.supportsInterface 40
RuleWhitelist._authorizeAddressListRemoveRuleWhitelist._authorizeAddressListRemove 263
RuleWhitelist._authorizeAddressListAddRuleWhitelist._authorizeAddressListAdd 352
RuleWhitelist._msgSender778RuleWhitelist._msgSender780
RuleWhitelist._contextSuffixLength779RuleWhitelist._contextSuffixLength781

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelist.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func.html similarity index 66% rename from doc/coverage/coverage/deployment/RuleWhitelist.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func.html index dca3a94..db22430 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelist.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelist.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelist.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,54 +53,54 @@ - +
Current view:top level - deployment - RuleWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
- - + + - + - + - + - - + + - + - - + + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelist._authorizeAddressListAddRuleWhitelist._authorizeAddressListAdd 352
RuleWhitelist._authorizeAddressListRemoveRuleWhitelist._authorizeAddressListRemove 263
RuleWhitelist._authorizeCheckSpenderManagerRuleWhitelist._authorizeCheckSpenderManager 1
RuleWhitelist._contextSuffixLength779RuleWhitelist._contextSuffixLength781
RuleWhitelist._msgDataRuleWhitelist._msgData 1
RuleWhitelist._msgSender778RuleWhitelist._msgSender780
RuleWhitelist.supportsInterfaceRuleWhitelist.supportsInterface 40

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelist.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.gcov.html similarity index 81% rename from doc/coverage/coverage/deployment/RuleWhitelist.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.gcov.html index b6fe556..130ea73 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelist.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelist.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelist.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelist.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleWhitelist.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelist.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 70 -
@@ -72,8 +72,8 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 5 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 5 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 6 : : /* ==== Abstract contracts === */ 7 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; 8 : : import {RuleWhitelistBase} from "../abstract/base/RuleWhitelistBase.sol"; @@ -96,54 +96,62 @@ 25 : : /** 26 : : * @param admin Address of the contract (Access Control) 27 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support - 28 : : */ - 29 : : constructor(address admin, address forwarderIrrevocable, bool checkSpender_) - 30 : : RuleWhitelistBase(forwarderIrrevocable, checkSpender_) - 31 : : AccessControlModuleStandalone(admin) - 32 : : { - 33 : : // no-op - 34 : : } - 35 : : - 36 : : /* ============ View Functions ============ */ + 28 : : * @param checkSpender_ Enables spender checks for transferFrom when true. + 29 : : * @param allowMintBurn Pre-lists `address(0)` at deployment when true. + 30 : : */ + 31 : : constructor(address admin, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + 32 : : RuleWhitelistBase(forwarderIrrevocable, checkSpender_, allowMintBurn) + 33 : : AccessControlModuleStandalone(admin) + 34 : : { + 35 : : // no-op + 36 : : } 37 : : - 38 : : /** - 39 : : * @notice Indicates whether this contract supports a given interface. - 40 : : * @param interfaceId The interface identifier, as specified in ERC-165. - 41 : : * @return supported True if the interface is supported. - 42 : : */ - 43 : 40 : function supportsInterface(bytes4 interfaceId) - 44 : : public - 45 : : view - 46 : : virtual - 47 : : override(AccessControlEnumerable, RuleWhitelistBase) - 48 : : returns (bool) - 49 : : { - 50 : 40 : return AccessControlEnumerable.supportsInterface(interfaceId) - 51 : 27 : || RuleWhitelistBase.supportsInterface(interfaceId); - 52 : : } - 53 : : - 54 : : /*////////////////////////////////////////////////////////////// - 55 : : ACCESS CONTROL - 56 : : //////////////////////////////////////////////////////////////*/ + 38 : : /*////////////////////////////////////////////////////////////// + 39 : : PUBLIC FUNCTIONS + 40 : : //////////////////////////////////////////////////////////////*/ + 41 : : + 42 : : /** + 43 : : * @notice Indicates whether this contract supports a given interface. + 44 : : * @param interfaceId The interface identifier, as specified in ERC-165. + 45 : : * @return supported True if the interface is supported. + 46 : : */ + 47 : 40 : function supportsInterface(bytes4 interfaceId) + 48 : : public + 49 : : view + 50 : : virtual + 51 : : override(AccessControlEnumerable, RuleWhitelistBase) + 52 : : returns (bool) + 53 : : { + 54 : 40 : return AccessControlEnumerable.supportsInterface(interfaceId) + 55 : 27 : || RuleWhitelistBase.supportsInterface(interfaceId); + 56 : : } 57 : : - 58 : 1 : function _authorizeCheckSpenderManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} - 59 : : - 60 : 352 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + 58 : : /*////////////////////////////////////////////////////////////// + 59 : : ACCESS CONTROL + 60 : : //////////////////////////////////////////////////////////////*/ 61 : : - 62 : 263 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + 62 : 1 : function _authorizeCheckSpenderManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} 63 : : - 64 : 778 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 65 : 778 : return super._msgSender(); - 66 : : } + 64 : 352 : function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + 65 : : + 66 : 263 : function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} 67 : : - 68 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 69 : 1 : return super._msgData(); - 70 : : } + 68 : : /*////////////////////////////////////////////////////////////// + 69 : : INTERNAL FUNCTIONS + 70 : : //////////////////////////////////////////////////////////////*/ 71 : : - 72 : 779 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 73 : 779 : return super._contextSuffixLength(); + 72 : 780 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 73 : 780 : return super._msgSender(); 74 : : } - 75 : : } + 75 : : + 76 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 77 : 1 : return super._msgData(); + 78 : : } + 79 : : + 80 : 781 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 81 : 781 : return super._contextSuffixLength(); + 82 : : } + 83 : : } @@ -151,7 +159,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html index 9117d9c..3de5344 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistOwnable2Step._msgDataRuleWhitelistOwnable2Step._msgData 1
RuleWhitelistOwnable2Step._authorizeAddressListAddRuleWhitelistOwnable2Step._authorizeAddressListAdd 2
RuleWhitelistOwnable2Step._authorizeAddressListRemoveRuleWhitelistOwnable2Step._authorizeAddressListRemove 2
RuleWhitelistOwnable2Step._authorizeCheckSpenderManagerRuleWhitelistOwnable2Step._authorizeCheckSpenderManager 2
RuleWhitelistOwnable2Step._msgSenderRuleWhitelistOwnable2Step._msgSender 15
RuleWhitelistOwnable2Step._contextSuffixLengthRuleWhitelistOwnable2Step._contextSuffixLength 16

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func.html index 259fa0e..0abcde6 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,50 +53,50 @@ - +
Current view:top level - deployment - RuleWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
- - + + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistOwnable2Step._authorizeAddressListAddRuleWhitelistOwnable2Step._authorizeAddressListAdd 2
RuleWhitelistOwnable2Step._authorizeAddressListRemoveRuleWhitelistOwnable2Step._authorizeAddressListRemove 2
RuleWhitelistOwnable2Step._authorizeCheckSpenderManagerRuleWhitelistOwnable2Step._authorizeCheckSpenderManager 2
RuleWhitelistOwnable2Step._contextSuffixLengthRuleWhitelistOwnable2Step._contextSuffixLength 16
RuleWhitelistOwnable2Step._msgDataRuleWhitelistOwnable2Step._msgData 1
RuleWhitelistOwnable2Step._msgSenderRuleWhitelistOwnable2Step._msgSender 15

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.gcov.html similarity index 65% rename from doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.gcov.html index b258205..8d12ab7 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleWhitelistOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 60 -
@@ -72,9 +72,9 @@ 1 : : // SPDX-License-Identifier: MPL-2.0 2 : : pragma solidity ^0.8.20; 3 : : - 4 : : import {Ownable} from "OZ/access/Ownable.sol"; - 5 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 6 : : import {Context} from "OZ/utils/Context.sol"; + 4 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 5 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 6 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 7 : : import {RuleWhitelistBase} from "../abstract/base/RuleWhitelistBase.sol"; 8 : : import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; 9 : : @@ -83,29 +83,47 @@ 12 : : * @notice Ownable2Step variant of RuleWhitelist with owner-based authorization hooks. 13 : : */ 14 : : contract RuleWhitelistOwnable2Step is RuleWhitelistBase, Ownable2Step { - 15 : : constructor(address owner, address forwarderIrrevocable, bool checkSpender_) - 16 : : RuleWhitelistBase(forwarderIrrevocable, checkSpender_) - 17 : : Ownable(owner) - 18 : : {} - 19 : : - 20 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} - 21 : : - 22 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} - 23 : : - 24 : 2 : function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} - 25 : : - 26 : 15 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { - 27 : 15 : return super._msgSender(); - 28 : : } + 15 : : /*////////////////////////////////////////////////////////////// + 16 : : CONSTRUCTOR + 17 : : //////////////////////////////////////////////////////////////*/ + 18 : : + 19 : : /** + 20 : : * @param owner Contract owner. + 21 : : * @param forwarderIrrevocable Address of the ERC-2771 forwarder. + 22 : : * @param checkSpender_ Enables spender checks for transferFrom when true. + 23 : : * @param allowMintBurn Pre-lists `address(0)` at deployment when true. + 24 : : */ + 25 : : constructor(address owner, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + 26 : : RuleWhitelistBase(forwarderIrrevocable, checkSpender_, allowMintBurn) + 27 : : Ownable(owner) + 28 : : {} 29 : : - 30 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { - 31 : 1 : return super._msgData(); - 32 : : } + 30 : : /*////////////////////////////////////////////////////////////// + 31 : : ACCESS CONTROL + 32 : : //////////////////////////////////////////////////////////////*/ 33 : : - 34 : 16 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { - 35 : 16 : return super._contextSuffixLength(); - 36 : : } - 37 : : } + 34 : 2 : function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + 35 : : + 36 : 2 : function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + 37 : : + 38 : 2 : function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + 39 : : + 40 : : /*////////////////////////////////////////////////////////////// + 41 : : INTERNAL FUNCTIONS + 42 : : //////////////////////////////////////////////////////////////*/ + 43 : : + 44 : 15 : function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { + 45 : 15 : return super._msgSender(); + 46 : : } + 47 : : + 48 : 1 : function _msgData() internal view virtual override(Context, RuleAddressSet) returns (bytes calldata) { + 49 : 1 : return super._msgData(); + 50 : : } + 51 : : + 52 : 16 : function _contextSuffixLength() internal view virtual override(Context, RuleAddressSet) returns (uint256) { + 53 : 16 : return super._contextSuffixLength(); + 54 : : } + 55 : : } @@ -113,7 +131,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func-sort-c.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func-sort-c.html index 5594f68..8b9413d 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapper.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapper.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,62 +53,62 @@ - +
Current view:top level - deployment - RuleWhitelistWrapper.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapper.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 90 -
- - + + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapper._msgDataRuleWhitelistWrapper._msgData 1
RuleWhitelistWrapper._revokeRoleRuleWhitelistWrapper._revokeRole 1
RuleWhitelistWrapper._authorizeCheckSpenderManagerRuleWhitelistWrapper._authorizeCheckSpenderManager 2
RuleWhitelistWrapper._grantRoleRuleWhitelistWrapper._grantRole 38
RuleWhitelistWrapper.hasRoleRuleWhitelistWrapper.hasRole 38
RuleWhitelistWrapper.supportsInterfaceRuleWhitelistWrapper.supportsInterface 46
RuleWhitelistWrapper._onlyRulesManagerRuleWhitelistWrapper._onlyRulesManager 90
RuleWhitelistWrapper._msgSenderRuleWhitelistWrapper._msgSender 133
RuleWhitelistWrapper._contextSuffixLengthRuleWhitelistWrapper._contextSuffixLength 134

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func.html similarity index 67% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func.html index d5cf199..80fbc74 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapper.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapper.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,62 +53,62 @@ - +
Current view:top level - deployment - RuleWhitelistWrapper.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapper.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 90 -
- - + + - + - + - + - + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapper._authorizeCheckSpenderManagerRuleWhitelistWrapper._authorizeCheckSpenderManager 2
RuleWhitelistWrapper._contextSuffixLengthRuleWhitelistWrapper._contextSuffixLength 134
RuleWhitelistWrapper._grantRoleRuleWhitelistWrapper._grantRole 38
RuleWhitelistWrapper._msgDataRuleWhitelistWrapper._msgData 1
RuleWhitelistWrapper._msgSenderRuleWhitelistWrapper._msgSender 133
RuleWhitelistWrapper._onlyRulesManagerRuleWhitelistWrapper._onlyRulesManager 90
RuleWhitelistWrapper._revokeRoleRuleWhitelistWrapper._revokeRole 1
RuleWhitelistWrapper.hasRoleRuleWhitelistWrapper.hasRole 38
RuleWhitelistWrapper.supportsInterfaceRuleWhitelistWrapper.supportsInterface 46

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.gcov.html similarity index 84% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.gcov.html index a7b062c..94f7837 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapper.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapper.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapper.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapper.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleWhitelistWrapper.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapper.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 90 -
@@ -74,102 +74,107 @@ 3 : : pragma solidity ^0.8.20; 4 : : 5 : : /* ==== OpenZeppelin === */ - 6 : : import {AccessControl} from "OZ/access/AccessControl.sol"; - 7 : : import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; - 8 : : import {Context} from "OZ/utils/Context.sol"; - 9 : : /* ==== Abstract contracts === */ - 10 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; - 11 : : import {RuleWhitelistWrapperBase} from "../abstract/base/RuleWhitelistWrapperBase.sol"; - 12 : : - 13 : : /** - 14 : : * @title Wrapper to call several different whitelist rules - 15 : : */ - 16 : : contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleStandalone { - 17 : : /*////////////////////////////////////////////////////////////// - 18 : : CONSTRUCTOR - 19 : : //////////////////////////////////////////////////////////////*/ - 20 : : /** - 21 : : * @param admin Address of the contract (Access Control) - 22 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support - 23 : : */ - 24 : : constructor(address admin, address forwarderIrrevocable, bool checkSpender_) - 25 : : RuleWhitelistWrapperBase(forwarderIrrevocable, checkSpender_) - 26 : : AccessControlModuleStandalone(admin) - 27 : : {} - 28 : : - 29 : : /* ============ Access control ============ */ - 30 : : - 31 : : /** - 32 : : * @dev Returns `true` if `account` has been granted `role`. - 33 : : */ - 34 : 38 : function hasRole(bytes32 role, address account) - 35 : : public - 36 : : view - 37 : : virtual - 38 : : override(AccessControl, AccessControlModuleStandalone) - 39 : : returns (bool) - 40 : : { - 41 : 134 : return AccessControlModuleStandalone.hasRole(role, account); - 42 : : } - 43 : : - 44 : 2 : function _authorizeCheckSpenderManager() internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} - 45 : : - 46 : : /** - 47 : : * @dev Restrict rules management to the dedicated role. - 48 : : */ - 49 : 90 : function _onlyRulesManager() internal virtual override onlyRole(RULES_MANAGEMENT_ROLE) {} - 50 : : - 51 : : /*////////////////////////////////////////////////////////////// - 52 : : ERC-2771 - 53 : : //////////////////////////////////////////////////////////////*/ - 54 : : - 55 : 133 : function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { - 56 : 133 : return RuleWhitelistWrapperBase._msgSender(); - 57 : : } - 58 : : - 59 : 1 : function _msgData() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (bytes calldata) { - 60 : 1 : return RuleWhitelistWrapperBase._msgData(); - 61 : : } - 62 : : - 63 : 134 : function _contextSuffixLength() - 64 : : internal - 65 : : view - 66 : : virtual - 67 : : override(RuleWhitelistWrapperBase, Context) - 68 : : returns (uint256) - 69 : : { - 70 : 134 : return RuleWhitelistWrapperBase._contextSuffixLength(); - 71 : : } - 72 : : - 73 : 46 : function supportsInterface(bytes4 interfaceId) - 74 : : public - 75 : : view - 76 : : virtual - 77 : : override(AccessControlEnumerable, RuleWhitelistWrapperBase) - 78 : : returns (bool) - 79 : : { - 80 : 46 : return RuleWhitelistWrapperBase.supportsInterface(interfaceId) - 81 : 16 : || AccessControlEnumerable.supportsInterface(interfaceId); - 82 : : } - 83 : : - 84 : 38 : function _grantRole(bytes32 role, address account) - 85 : : internal - 86 : : virtual - 87 : : override(AccessControl, AccessControlEnumerable) - 88 : : returns (bool) - 89 : : { - 90 : 38 : return AccessControlEnumerable._grantRole(role, account); - 91 : : } - 92 : : - 93 : 1 : function _revokeRole(bytes32 role, address account) - 94 : : internal - 95 : : virtual - 96 : : override(AccessControl, AccessControlEnumerable) - 97 : : returns (bool) - 98 : : { - 99 : 1 : return AccessControlEnumerable._revokeRole(role, account); - 100 : : } - 101 : : } + 6 : : import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; + 7 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; + 8 : : /* ==== Abstract contracts === */ + 9 : : import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; + 10 : : import {RuleWhitelistWrapperBase} from "../abstract/base/RuleWhitelistWrapperBase.sol"; + 11 : : + 12 : : /** + 13 : : * @title Wrapper to call several different whitelist rules + 14 : : */ + 15 : : contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleStandalone { + 16 : : /*////////////////////////////////////////////////////////////// + 17 : : CONSTRUCTOR + 18 : : //////////////////////////////////////////////////////////////*/ + 19 : : /** + 20 : : * @param admin Address of the contract (Access Control) + 21 : : * @param forwarderIrrevocable Address of the forwarder, required for the gasless support + 22 : : */ + 23 : : constructor(address admin, address forwarderIrrevocable, bool checkSpender_) + 24 : : RuleWhitelistWrapperBase(forwarderIrrevocable, checkSpender_) + 25 : : AccessControlModuleStandalone(admin) + 26 : : {} + 27 : : + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : PUBLIC FUNCTIONS + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : : /** + 33 : : * @dev Returns `true` if `account` has been granted `role`. + 34 : : */ + 35 : 38 : function hasRole(bytes32 role, address account) + 36 : : public + 37 : : view + 38 : : virtual + 39 : : override + 40 : : returns (bool) + 41 : : { + 42 : 134 : return AccessControlModuleStandalone.hasRole(role, account); + 43 : : } + 44 : : + 45 : 46 : function supportsInterface(bytes4 interfaceId) + 46 : : public + 47 : : view + 48 : : virtual + 49 : : override(AccessControlEnumerable, RuleWhitelistWrapperBase) + 50 : : returns (bool) + 51 : : { + 52 : 46 : return RuleWhitelistWrapperBase.supportsInterface(interfaceId) + 53 : 31 : || AccessControlEnumerable.supportsInterface(interfaceId); + 54 : : } + 55 : : + 56 : : /*////////////////////////////////////////////////////////////// + 57 : : ACCESS CONTROL + 58 : : //////////////////////////////////////////////////////////////*/ + 59 : : + 60 : 2 : function _authorizeCheckSpenderManager() internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + 61 : : + 62 : : /** + 63 : : * @dev Restrict rules management to the dedicated role. + 64 : : */ + 65 : 90 : function _onlyRulesManager() internal virtual override onlyRole(RULES_MANAGEMENT_ROLE) {} + 66 : : + 67 : : /*////////////////////////////////////////////////////////////// + 68 : : INTERNAL FUNCTIONS + 69 : : //////////////////////////////////////////////////////////////*/ + 70 : : + 71 : 133 : function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { + 72 : 133 : return RuleWhitelistWrapperBase._msgSender(); + 73 : : } + 74 : : + 75 : 1 : function _msgData() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (bytes calldata) { + 76 : 1 : return RuleWhitelistWrapperBase._msgData(); + 77 : : } + 78 : : + 79 : 134 : function _contextSuffixLength() + 80 : : internal + 81 : : view + 82 : : virtual + 83 : : override(RuleWhitelistWrapperBase, Context) + 84 : : returns (uint256) + 85 : : { + 86 : 134 : return RuleWhitelistWrapperBase._contextSuffixLength(); + 87 : : } + 88 : : + 89 : 38 : function _grantRole(bytes32 role, address account) + 90 : : internal + 91 : : virtual + 92 : : override + 93 : : returns (bool) + 94 : : { + 95 : 38 : return AccessControlEnumerable._grantRole(role, account); + 96 : : } + 97 : : + 98 : 1 : function _revokeRole(bytes32 role, address account) + 99 : : internal + 100 : : virtual + 101 : : override + 102 : : returns (bool) + 103 : : { + 104 : 1 : return AccessControlEnumerable._revokeRole(role, account); + 105 : : } + 106 : : } @@ -177,7 +182,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html similarity index 69% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html index a882b98..c89b317 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func-sort-c.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapperOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapperOwnable2Step._msgDataRuleWhitelistWrapperOwnable2Step._msgData 1
RuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManagerRuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManager 2
RuleWhitelistWrapperOwnable2Step._onlyRulesManagerRuleWhitelistWrapperOwnable2Step._onlyRulesManager 2
RuleWhitelistWrapperOwnable2Step._msgSenderRuleWhitelistWrapperOwnable2Step._msgSender 12
RuleWhitelistWrapperOwnable2Step._contextSuffixLengthRuleWhitelistWrapperOwnable2Step._contextSuffixLength 13

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html similarity index 69% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html index 8a05ca5..b09287f 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.func.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapperOwnable2Step.sol - functions - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol - functions + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,46 +53,46 @@ - +
Current view:top level - deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
- - + + - + - + - + - + - +

Function Name Sort by function nameHit count Sort by hit countFunction Name Sort by function nameHit count Sort by hit count
RuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManagerRuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManager 2
RuleWhitelistWrapperOwnable2Step._contextSuffixLengthRuleWhitelistWrapperOwnable2Step._contextSuffixLength 13
RuleWhitelistWrapperOwnable2Step._msgDataRuleWhitelistWrapperOwnable2Step._msgData 1
RuleWhitelistWrapperOwnable2Step._msgSenderRuleWhitelistWrapperOwnable2Step._msgSender 12
RuleWhitelistWrapperOwnable2Step._onlyRulesManagerRuleWhitelistWrapperOwnable2Step._onlyRulesManager 2

- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html similarity index 83% rename from doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html rename to doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html index 9fad630..726dff2 100644 --- a/doc/coverage/coverage/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol.gcov.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment/RuleWhitelistWrapperOwnable2Step.sol - + LCOV - lcov.info - src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions)top level - src/rules/validation/deployment - RuleWhitelistWrapperOwnable2Step.sol (source / functions) Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 50 -
@@ -74,9 +74,9 @@ 3 : : pragma solidity ^0.8.20; 4 : : 5 : : /* ==== OpenZeppelin === */ - 6 : : import {Ownable} from "OZ/access/Ownable.sol"; - 7 : : import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; - 8 : : import {Context} from "OZ/utils/Context.sol"; + 6 : : import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + 7 : : import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; + 8 : : import {Context} from "@openzeppelin/contracts/utils/Context.sol"; 9 : : /* ==== Abstract contracts === */ 10 : : import {RuleWhitelistWrapperBase} from "../abstract/base/RuleWhitelistWrapperBase.sol"; 11 : : @@ -96,35 +96,39 @@ 25 : : Ownable(owner) 26 : : {} 27 : : - 28 : 2 : function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} - 29 : : - 30 : : /** - 31 : : * @dev Restrict rules management to the owner. - 32 : : */ - 33 : 2 : function _onlyRulesManager() internal view virtual override onlyOwner {} - 34 : : - 35 : : /*////////////////////////////////////////////////////////////// - 36 : : ERC-2771 - 37 : : //////////////////////////////////////////////////////////////*/ + 28 : : /*////////////////////////////////////////////////////////////// + 29 : : ACCESS CONTROL + 30 : : //////////////////////////////////////////////////////////////*/ + 31 : : + 32 : 2 : function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + 33 : : + 34 : : /** + 35 : : * @dev Restrict rules management to the owner. + 36 : : */ + 37 : 2 : function _onlyRulesManager() internal view virtual override onlyOwner {} 38 : : - 39 : 12 : function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { - 40 : 12 : return RuleWhitelistWrapperBase._msgSender(); - 41 : : } + 39 : : /*////////////////////////////////////////////////////////////// + 40 : : INTERNAL FUNCTIONS + 41 : : //////////////////////////////////////////////////////////////*/ 42 : : - 43 : 1 : function _msgData() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (bytes calldata) { - 44 : 1 : return RuleWhitelistWrapperBase._msgData(); + 43 : 12 : function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { + 44 : 12 : return RuleWhitelistWrapperBase._msgSender(); 45 : : } 46 : : - 47 : 13 : function _contextSuffixLength() - 48 : : internal - 49 : : view - 50 : : virtual - 51 : : override(RuleWhitelistWrapperBase, Context) - 52 : : returns (uint256) - 53 : : { - 54 : 13 : return RuleWhitelistWrapperBase._contextSuffixLength(); - 55 : : } - 56 : : } + 47 : 1 : function _msgData() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (bytes calldata) { + 48 : 1 : return RuleWhitelistWrapperBase._msgData(); + 49 : : } + 50 : : + 51 : 13 : function _contextSuffixLength() + 52 : : internal + 53 : : view + 54 : : virtual + 55 : : override(RuleWhitelistWrapperBase, Context) + 56 : : returns (uint256) + 57 : : { + 58 : 13 : return RuleWhitelistWrapperBase._contextSuffixLength(); + 59 : : } + 60 : : } @@ -132,7 +136,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/index-sort-b.html b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-b.html similarity index 77% rename from doc/coverage/coverage/deployment/index-sort-b.html rename to doc/coverage/coverage/src/rules/validation/deployment/index-sort-b.html index 746722a..e57f953 100644 --- a/doc/coverage/coverage/deployment/index-sort-b.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-b.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment - + LCOV - lcov.info - src/rules/validation/deployment + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deploymenttop level - src/rules/validation/deployment Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 790 -
@@ -76,135 +76,135 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage - RuleWhitelistOwnable2Step.sol + RuleMaxTotalSupply.sol -
100.0%
+
100.0%
100.0 % - 9 / 9 + 4 / 4 100.0 % - 6 / 6 + 2 / 2 - 0 / 0 - RuleMaxTotalSupplyOwnable2Step.sol + RuleSpenderWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 1 / 1 + 8 / 8 100.0 % - 1 / 1 + 5 / 5 - 0 / 0 - RuleIdentityRegistryOwnable2Step.sol + RuleERC2980Ownable2Step.sol -
100.0%
+
100.0%
100.0 % - 1 / 1 + 10 / 10 100.0 % - 1 / 1 + 7 / 7 - 0 / 0 - RuleIdentityRegistry.sol + RuleWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 4 / 4 + 9 / 9 100.0 % - 2 / 2 + 6 / 6 - 0 / 0 - RuleWhitelistWrapperOwnable2Step.sol + RuleBlacklist.sol -
100.0%
+
100.0%
100.0 % - 8 / 8 + 11 / 11 100.0 % - 5 / 5 + 6 / 6 - 0 / 0 - RuleSanctionsList.sol + RuleWhitelist.sol -
100.0%
+
100.0%
100.0 % - 10 / 10 + 12 / 12 100.0 % - 5 / 5 + 7 / 7 - 0 / 0 - RuleERC2980.sol + RuleSanctionsList.sol -
100.0%
+
100.0%
100.0 % - 12 / 12 + 10 / 10 100.0 % - 8 / 8 + 5 / 5 - 0 / 0 - RuleMaxTotalSupply.sol + RuleSpenderWhitelist.sol -
100.0%
+
100.0%
100.0 % - 4 / 4 + 11 / 11 100.0 % - 2 / 2 + 6 / 6 - 0 / 0 - RuleWhitelist.sol + RuleIdentityRegistry.sol -
100.0%
+
100.0%
100.0 % - 12 / 12 + 4 / 4 100.0 % - 7 / 7 + 2 / 2 - 0 / 0 - RuleWhitelistWrapper.sol + RuleSanctionsListOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 17 / 17 + 7 / 7 100.0 % - 9 / 9 + 4 / 4 - 0 / 0 - RuleSpenderWhitelistOwnable2Step.sol + RuleBlacklistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -214,62 +214,62 @@ 0 / 0 - RuleSanctionsListOwnable2Step.sol + RuleWhitelistWrapper.sol -
100.0%
+
100.0%
100.0 % - 7 / 7 + 17 / 17 100.0 % - 4 / 4 + 9 / 9 - 0 / 0 - RuleSpenderWhitelist.sol + RuleERC2980.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 + 12 / 12 100.0 % - 6 / 6 + 8 / 8 - 0 / 0 - RuleBlacklistOwnable2Step.sol + RuleMaxTotalSupplyOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 8 / 8 + 1 / 1 100.0 % - 5 / 5 + 1 / 1 - 0 / 0 - RuleERC2980Ownable2Step.sol + RuleIdentityRegistryOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 10 / 10 + 1 / 1 100.0 % - 7 / 7 + 1 / 1 - 0 / 0 - RuleBlacklist.sol + RuleWhitelistWrapperOwnable2Step.sol -
100.0%
+
100.0%
100.0 % - 11 / 11 + 8 / 8 100.0 % - 6 / 6 + 5 / 5 - 0 / 0 @@ -278,7 +278,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/index-sort-f.html b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-f.html similarity index 77% rename from doc/coverage/coverage/deployment/index-sort-f.html rename to doc/coverage/coverage/src/rules/validation/deployment/index-sort-f.html index 966a0a0..a62cbc5 100644 --- a/doc/coverage/coverage/deployment/index-sort-f.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-f.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment - + LCOV - lcov.info - src/rules/validation/deployment + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deploymenttop level - src/rules/validation/deployment Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 790 -
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleMaxTotalSupplyOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -96,7 +96,7 @@ RuleIdentityRegistryOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -106,9 +106,9 @@ 0 / 0 - RuleIdentityRegistry.sol + RuleMaxTotalSupply.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -118,9 +118,9 @@ 0 / 0 - RuleMaxTotalSupply.sol + RuleIdentityRegistry.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -132,7 +132,7 @@ RuleSanctionsListOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 7 / 7 @@ -142,9 +142,9 @@ 0 / 0 - RuleWhitelistWrapperOwnable2Step.sol + RuleSpenderWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -156,7 +156,7 @@ RuleSanctionsList.sol -
100.0%
+
100.0%
100.0 % 10 / 10 @@ -166,9 +166,9 @@ 0 / 0 - RuleSpenderWhitelistOwnable2Step.sol + RuleBlacklistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -178,9 +178,9 @@ 0 / 0 - RuleBlacklistOwnable2Step.sol + RuleWhitelistWrapperOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -192,7 +192,7 @@ RuleWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 9 / 9 @@ -202,9 +202,9 @@ 0 / 0 - RuleSpenderWhitelist.sol + RuleBlacklist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -214,9 +214,9 @@ 0 / 0 - RuleBlacklist.sol + RuleSpenderWhitelist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -226,24 +226,24 @@ 0 / 0 - RuleWhitelist.sol + RuleERC2980Ownable2Step.sol -
100.0%
+
100.0%
100.0 % - 12 / 12 + 10 / 10 100.0 % 7 / 7 - 0 / 0 - RuleERC2980Ownable2Step.sol + RuleWhitelist.sol -
100.0%
+
100.0%
100.0 % - 10 / 10 + 12 / 12 100.0 % 7 / 7 - @@ -252,7 +252,7 @@ RuleERC2980.sol -
100.0%
+
100.0%
100.0 % 12 / 12 @@ -264,7 +264,7 @@ RuleWhitelistWrapper.sol -
100.0%
+
100.0%
100.0 % 17 / 17 @@ -278,7 +278,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/index-sort-l.html b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-l.html similarity index 77% rename from doc/coverage/coverage/deployment/index-sort-l.html rename to doc/coverage/coverage/src/rules/validation/deployment/index-sort-l.html index af7dd25..a65138a 100644 --- a/doc/coverage/coverage/deployment/index-sort-l.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/index-sort-l.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment - + LCOV - lcov.info - src/rules/validation/deployment + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deploymenttop level - src/rules/validation/deployment Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 790 -
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleMaxTotalSupplyOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -96,7 +96,7 @@ RuleIdentityRegistryOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -106,9 +106,9 @@ 0 / 0 - RuleIdentityRegistry.sol + RuleMaxTotalSupply.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -118,9 +118,9 @@ 0 / 0 - RuleMaxTotalSupply.sol + RuleIdentityRegistry.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -132,7 +132,7 @@ RuleSanctionsListOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 7 / 7 @@ -142,9 +142,9 @@ 0 / 0 - RuleWhitelistWrapperOwnable2Step.sol + RuleSpenderWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -154,9 +154,9 @@ 0 / 0 - RuleSpenderWhitelistOwnable2Step.sol + RuleBlacklistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -166,9 +166,9 @@ 0 / 0 - RuleBlacklistOwnable2Step.sol + RuleWhitelistWrapperOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -180,7 +180,7 @@ RuleWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 9 / 9 @@ -190,33 +190,33 @@ 0 / 0 - RuleSanctionsList.sol + RuleERC2980Ownable2Step.sol -
100.0%
+
100.0%
100.0 % 10 / 10 100.0 % - 5 / 5 + 7 / 7 - 0 / 0 - RuleERC2980Ownable2Step.sol + RuleSanctionsList.sol -
100.0%
+
100.0%
100.0 % 10 / 10 100.0 % - 7 / 7 + 5 / 5 - 0 / 0 - RuleSpenderWhitelist.sol + RuleBlacklist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -226,9 +226,9 @@ 0 / 0 - RuleBlacklist.sol + RuleSpenderWhitelist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -238,33 +238,33 @@ 0 / 0 - RuleERC2980.sol + RuleWhitelist.sol -
100.0%
+
100.0%
100.0 % 12 / 12 100.0 % - 8 / 8 + 7 / 7 - 0 / 0 - RuleWhitelist.sol + RuleERC2980.sol -
100.0%
+
100.0%
100.0 % 12 / 12 100.0 % - 7 / 7 + 8 / 8 - 0 / 0 RuleWhitelistWrapper.sol -
100.0%
+
100.0%
100.0 % 17 / 17 @@ -278,7 +278,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/coverage/deployment/index.html b/doc/coverage/coverage/src/rules/validation/deployment/index.html similarity index 77% rename from doc/coverage/coverage/deployment/index.html rename to doc/coverage/coverage/src/rules/validation/deployment/index.html index 6516ec5..4a56d2b 100644 --- a/doc/coverage/coverage/deployment/index.html +++ b/doc/coverage/coverage/src/rules/validation/deployment/index.html @@ -4,22 +4,22 @@ - LCOV - lcov.info - deployment - + LCOV - lcov.info - src/rules/validation/deployment + - + - +
LCOV - code coverage report
- + @@ -37,7 +37,7 @@ - + @@ -53,12 +53,12 @@ - +
Current view:top level - deploymenttop level - src/rules/validation/deployment Hit
Date:2026-03-10 16:16:272026-04-16 15:29:51 Functions: 790 -
@@ -76,15 +76,15 @@ - Filename Sort by name - Line Coverage Sort by line coverage - Functions Sort by function coverage - Branches Sort by branch coverage + Filename Sort by name + Line Coverage Sort by line coverage + Functions Sort by function coverage + Branches Sort by branch coverage RuleBlacklist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -96,7 +96,7 @@ RuleBlacklistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -108,7 +108,7 @@ RuleERC2980.sol -
100.0%
+
100.0%
100.0 % 12 / 12 @@ -120,7 +120,7 @@ RuleERC2980Ownable2Step.sol -
100.0%
+
100.0%
100.0 % 10 / 10 @@ -132,7 +132,7 @@ RuleIdentityRegistry.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -144,7 +144,7 @@ RuleIdentityRegistryOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -156,7 +156,7 @@ RuleMaxTotalSupply.sol -
100.0%
+
100.0%
100.0 % 4 / 4 @@ -168,7 +168,7 @@ RuleMaxTotalSupplyOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 1 / 1 @@ -180,7 +180,7 @@ RuleSanctionsList.sol -
100.0%
+
100.0%
100.0 % 10 / 10 @@ -192,7 +192,7 @@ RuleSanctionsListOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 7 / 7 @@ -204,7 +204,7 @@ RuleSpenderWhitelist.sol -
100.0%
+
100.0%
100.0 % 11 / 11 @@ -216,7 +216,7 @@ RuleSpenderWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -228,7 +228,7 @@ RuleWhitelist.sol -
100.0%
+
100.0%
100.0 % 12 / 12 @@ -240,7 +240,7 @@ RuleWhitelistOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 9 / 9 @@ -252,7 +252,7 @@ RuleWhitelistWrapper.sol -
100.0%
+
100.0%
100.0 % 17 / 17 @@ -264,7 +264,7 @@ RuleWhitelistWrapperOwnable2Step.sol -
100.0%
+
100.0%
100.0 % 8 / 8 @@ -278,7 +278,7 @@
- +
Generated by: LCOV version 1.16

diff --git a/doc/coverage/lcov.info b/doc/coverage/lcov.info index 65fb8e6..41f4b88 100644 --- a/doc/coverage/lcov.info +++ b/doc/coverage/lcov.info @@ -1,20 +1,20 @@ TN: SF:src/modules/AccessControlModuleStandalone.sol -DA:24,421 -FN:24,AccessControlModuleStandalone.constructor -FNDA:421,AccessControlModuleStandalone.constructor -DA:25,421 -BRDA:25,0,0,6 -BRDA:25,0,1,415 -DA:29,415 -DA:38,531 -FN:38,AccessControlModuleStandalone.hasRole -FNDA:531,AccessControlModuleStandalone.hasRole -DA:47,3534 -BRDA:47,1,0,3021 -BRDA:47,1,1,513 -DA:48,3021 -DA:50,513 +DA:27,430 +FN:27,AccessControlModuleStandalone.constructor +FNDA:430,AccessControlModuleStandalone.constructor +DA:28,430 +BRDA:28,0,0,6 +BRDA:28,0,1,424 +DA:32,424 +DA:42,540 +FN:42,AccessControlModuleStandalone.hasRole +FNDA:540,AccessControlModuleStandalone.hasRole +DA:51,3627 +BRDA:51,1,0,3104 +BRDA:51,1,1,523 +DA:52,3104 +DA:54,523 FNF:2 FNH:2 LF:7 @@ -24,10 +24,10 @@ BRH:4 end_of_record TN: SF:src/modules/VersionModule.sol -DA:14,7 -FN:14,VersionModule.version +DA:18,7 +FN:18,VersionModule.version FNDA:7,VersionModule.version -DA:15,7 +DA:19,7 FNF:1 FNH:1 LF:2 @@ -37,252 +37,286 @@ BRH:0 end_of_record TN: SF:src/rules/operation/RuleConditionalTransferLight.sol -DA:27,18 -FN:27,RuleConditionalTransferLight.supportsInterface -FNDA:18,RuleConditionalTransferLight.supportsInterface -DA:34,18 -DA:35,11 -DA:38,1 -FN:38,RuleConditionalTransferLight.created -FNDA:1,RuleConditionalTransferLight.created -DA:39,1 -DA:42,1 -FN:42,RuleConditionalTransferLight.destroyed -FNDA:1,RuleConditionalTransferLight.destroyed -DA:43,1 -DA:46,1848 -FN:46,RuleConditionalTransferLight._authorizeTransferApproval -FNDA:1848,RuleConditionalTransferLight._authorizeTransferApproval -DA:48,770 -FN:48,RuleConditionalTransferLight._authorizeTransferExecution -FNDA:770,RuleConditionalTransferLight._authorizeTransferExecution -DA:49,770 -BRDA:49,0,0,1 -BRDA:49,0,1,769 -DA:52,19 -FN:52,RuleConditionalTransferLight._onlyComplianceManager -FNDA:19,RuleConditionalTransferLight._onlyComplianceManager -FNF:6 -FNH:6 -LF:11 -LH:11 -BRF:2 -BRH:2 +DA:33,21 +FN:33,RuleConditionalTransferLight.supportsInterface +FNDA:21,RuleConditionalTransferLight.supportsInterface +DA:40,21 +DA:41,20 +DA:42,19 +DA:43,13 +DA:44,12 +DA:45,11 +DA:52,1924 +FN:52,RuleConditionalTransferLight._authorizeTransferApproval +FNDA:1924,RuleConditionalTransferLight._authorizeTransferApproval +DA:54,25 +FN:54,RuleConditionalTransferLight._onlyComplianceManager +FNDA:25,RuleConditionalTransferLight._onlyComplianceManager +FNF:3 +FNH:3 +LF:9 +LH:9 +BRF:0 +BRH:0 end_of_record TN: SF:src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol -DA:18,4 -FN:18,RuleConditionalTransferLightOwnable2Step.supportsInterface -FNDA:4,RuleConditionalTransferLightOwnable2Step.supportsInterface -DA:19,4 -DA:20,2 -DA:23,4 -FN:23,RuleConditionalTransferLightOwnable2Step._authorizeTransferApproval +DA:29,7 +FN:29,RuleConditionalTransferLightOwnable2Step.supportsInterface +FNDA:7,RuleConditionalTransferLightOwnable2Step.supportsInterface +DA:30,7 +DA:31,6 +DA:32,5 +DA:33,4 +DA:34,3 +DA:35,2 +DA:42,4 +FN:42,RuleConditionalTransferLightOwnable2Step._authorizeTransferApproval FNDA:4,RuleConditionalTransferLightOwnable2Step._authorizeTransferApproval -DA:25,3 -FN:25,RuleConditionalTransferLightOwnable2Step._authorizeTransferExecution -FNDA:3,RuleConditionalTransferLightOwnable2Step._authorizeTransferExecution +DA:44,3 +FN:44,RuleConditionalTransferLightOwnable2Step._onlyComplianceManager +FNDA:3,RuleConditionalTransferLightOwnable2Step._onlyComplianceManager FNF:3 FNH:3 -LF:5 -LH:5 +LF:9 +LH:9 BRF:0 BRH:0 end_of_record TN: -SF:src/rules/operation/abstract/RuleConditionalTransferLightBase.sol -DA:27,1841 -FN:27,RuleConditionalTransferLightBase.approveTransfer -FNDA:1841,RuleConditionalTransferLightBase.approveTransfer -DA:28,1842 -DA:29,1842 -DA:30,1842 -DA:33,4 -FN:33,RuleConditionalTransferLightBase.cancelTransferApproval -FNDA:4,RuleConditionalTransferLightBase.cancelTransferApproval -DA:34,3 -DA:35,3 -DA:36,3 -BRDA:36,0,0,1 -BRDA:36,0,1,2 -DA:37,2 -DA:38,2 -DA:47,4 -FN:47,RuleConditionalTransferLightBase.approveAndTransferIfAllowed -FNDA:4,RuleConditionalTransferLightBase.approveAndTransferIfAllowed +SF:src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol +DA:20,4 +FN:20,RuleConditionalTransferLightApprovalBase.onlyTransferApprover +FNDA:4,RuleConditionalTransferLightApprovalBase.onlyTransferApprover +DA:21,4 +DA:25,3 +FN:25,RuleConditionalTransferLightApprovalBase.onlyTransferExecutor +FNDA:3,RuleConditionalTransferLightApprovalBase.onlyTransferExecutor +DA:26,3 +DA:30,0 +FN:30,RuleConditionalTransferLightApprovalBase._authorizeTransferApproval +FNDA:0,RuleConditionalTransferLightApprovalBase._authorizeTransferApproval +DA:32,0 +FN:32,RuleConditionalTransferLightApprovalBase._authorizeTransferExecution +FNDA:0,RuleConditionalTransferLightApprovalBase._authorizeTransferExecution +DA:38,3 +FN:38,RuleConditionalTransferLightApprovalBase.transferred +FNDA:3,RuleConditionalTransferLightApprovalBase.transferred +DA:39,3 +DA:46,1917 +FN:46,RuleConditionalTransferLightApprovalBase.approveTransfer +FNDA:1917,RuleConditionalTransferLightApprovalBase.approveTransfer +DA:47,1918 +DA:48,1918 +DA:49,1918 DA:52,4 -BRDA:52,1,0,1 -BRDA:52,1,1,3 +FN:52,RuleConditionalTransferLightApprovalBase.cancelTransferApproval +FNDA:4,RuleConditionalTransferLightApprovalBase.cancelTransferApproval +DA:53,3 DA:54,3 -DA:56,3 -DA:57,3 -BRDA:57,2,0,1 -BRDA:57,2,1,2 -DA:59,2 -DA:60,2 -BRDA:60,3,0,1 -BRDA:60,3,1,1 -DA:61,1 -DA:64,263 -FN:64,RuleConditionalTransferLightBase.approvedCount -FNDA:263,RuleConditionalTransferLightBase.approvedCount -DA:65,263 -DA:66,263 -DA:69,769 -FN:69,RuleConditionalTransferLightBase.transferred.0 -FNDA:769,RuleConditionalTransferLightBase.transferred.0 -DA:74,767 -DA:77,1 -FN:77,RuleConditionalTransferLightBase.transferred.1 +DA:55,3 +BRDA:55,0,0,1 +BRDA:55,0,1,2 +DA:56,2 +DA:57,2 +DA:60,263 +FN:60,RuleConditionalTransferLightApprovalBase.approvedCount +FNDA:263,RuleConditionalTransferLightApprovalBase.approvedCount +DA:61,263 +DA:62,263 +DA:69,3 +FN:69,RuleConditionalTransferLightApprovalBase._transferredFromContext +FNDA:3,RuleConditionalTransferLightApprovalBase._transferredFromContext +DA:70,3 +DA:73,850 +FN:73,RuleConditionalTransferLightApprovalBase._transferred +FNDA:850,RuleConditionalTransferLightApprovalBase._transferred +DA:74,850 +BRDA:74,1,0,850 +DA:75,850 +DA:77,846 +DA:78,846 +DA:80,846 +BRDA:80,2,0,3 +BRDA:80,2,1,843 +DA:82,843 +DA:83,843 +DA:86,3039 +FN:86,RuleConditionalTransferLightApprovalBase._transferHash +FNDA:3039,RuleConditionalTransferLightApprovalBase._transferHash +DA:89,3039 +DA:90,3039 +DA:91,3039 +DA:92,3039 +DA:93,3039 +FNF:11 +FNH:9 +LF:37 +LH:35 +BRF:5 +BRH:5 +end_of_record +TN: +SF:src/rules/operation/abstract/RuleConditionalTransferLightBase.sol +DA:32,1 +FN:32,RuleConditionalTransferLightBase.canReturnTransferRestrictionCode +FNDA:1,RuleConditionalTransferLightBase.canReturnTransferRestrictionCode +DA:33,1 +DA:36,2 +FN:36,RuleConditionalTransferLightBase.messageForTransferRestriction +FNDA:2,RuleConditionalTransferLightBase.messageForTransferRestriction +DA:42,2 +BRDA:42,0,0,1 +DA:43,1 +DA:45,1 +DA:48,1 +FN:48,RuleConditionalTransferLightBase.created +FNDA:1,RuleConditionalTransferLightBase.created +DA:49,1 +DA:52,1 +FN:52,RuleConditionalTransferLightBase.destroyed +FNDA:1,RuleConditionalTransferLightBase.destroyed +DA:53,1 +DA:66,4 +FN:66,RuleConditionalTransferLightBase.approveAndTransferIfAllowed +FNDA:4,RuleConditionalTransferLightBase.approveAndTransferIfAllowed +DA:71,4 +DA:72,4 +BRDA:72,1,0,1 +BRDA:72,1,1,3 +DA:74,3 +DA:76,3 +DA:77,3 +BRDA:77,2,0,1 +BRDA:77,2,1,2 +DA:79,2 +DA:80,1 +DA:83,846 +FN:83,RuleConditionalTransferLightBase.transferred.0 +FNDA:846,RuleConditionalTransferLightBase.transferred.0 +DA:88,844 +DA:91,1 +FN:91,RuleConditionalTransferLightBase.transferred.1 FNDA:1,RuleConditionalTransferLightBase.transferred.1 -DA:88,1 -DA:91,7 -FN:91,RuleConditionalTransferLightBase.detectTransferRestriction +DA:102,1 +DA:114,27 +FN:114,RuleConditionalTransferLightBase.bindToken +FNDA:27,RuleConditionalTransferLightBase.bindToken +DA:115,26 +BRDA:115,3,0,1 +BRDA:115,3,1,25 +DA:116,25 +DA:119,7 +FN:119,RuleConditionalTransferLightBase.detectTransferRestriction FNDA:7,RuleConditionalTransferLightBase.detectTransferRestriction -DA:97,13 -BRDA:97,4,0,4 -DA:98,4 -DA:100,9 -DA:101,9 -BRDA:101,5,0,6 -DA:102,6 -DA:104,3 -DA:107,1 -FN:107,RuleConditionalTransferLightBase.detectTransferRestrictionFrom +DA:125,13 +BRDA:125,4,0,4 +DA:126,4 +DA:128,9 +DA:129,9 +BRDA:129,5,0,6 +DA:130,6 +DA:132,3 +DA:135,1 +FN:135,RuleConditionalTransferLightBase.detectTransferRestrictionFrom FNDA:1,RuleConditionalTransferLightBase.detectTransferRestrictionFrom -DA:119,2 -DA:122,4 -FN:122,RuleConditionalTransferLightBase.canTransfer +DA:147,2 +DA:150,4 +FN:150,RuleConditionalTransferLightBase.canTransfer FNDA:4,RuleConditionalTransferLightBase.canTransfer -DA:128,4 -DA:131,1 -FN:131,RuleConditionalTransferLightBase.canTransferFrom +DA:156,4 +DA:159,1 +FN:159,RuleConditionalTransferLightBase.canTransferFrom FNDA:1,RuleConditionalTransferLightBase.canTransferFrom -DA:137,1 -DA:141,1 -FN:141,RuleConditionalTransferLightBase.canReturnTransferRestrictionCode -FNDA:1,RuleConditionalTransferLightBase.canReturnTransferRestrictionCode -DA:142,1 -DA:145,2 -FN:145,RuleConditionalTransferLightBase.messageForTransferRestriction -FNDA:2,RuleConditionalTransferLightBase.messageForTransferRestriction -DA:151,2 -BRDA:151,6,0,1 -DA:152,1 -DA:154,1 -DA:157,3 -FN:157,RuleConditionalTransferLightBase.transferred.2 -FNDA:3,RuleConditionalTransferLightBase.transferred.2 -DA:158,3 -DA:161,3 -FN:161,RuleConditionalTransferLightBase._transferredFromContext -FNDA:3,RuleConditionalTransferLightBase._transferredFromContext -DA:162,3 -DA:165,773 -FN:165,RuleConditionalTransferLightBase._transferred -FNDA:773,RuleConditionalTransferLightBase._transferred -DA:166,773 -BRDA:166,7,0,773 -DA:167,773 -DA:169,768 -DA:170,768 -DA:172,768 -BRDA:172,8,0,3 -BRDA:172,8,1,765 -DA:174,765 -DA:175,765 -DA:178,2885 -FN:178,RuleConditionalTransferLightBase._transferHash -FNDA:2885,RuleConditionalTransferLightBase._transferHash -DA:181,2885 -DA:182,2885 -DA:183,2885 -DA:184,2885 -DA:185,2885 -DA:193,4 -FN:193,RuleConditionalTransferLightBase.onlyTransferApprover -FNDA:4,RuleConditionalTransferLightBase.onlyTransferApprover -DA:194,4 -DA:198,3 -FN:198,RuleConditionalTransferLightBase.onlyTransferExecutor -FNDA:3,RuleConditionalTransferLightBase.onlyTransferExecutor -DA:199,3 -FNF:18 -FNH:18 -LF:66 -LH:66 -BRF:14 -BRH:14 +DA:165,1 +DA:173,850 +FN:173,RuleConditionalTransferLightBase._authorizeTransferExecution +FNDA:850,RuleConditionalTransferLightBase._authorizeTransferExecution +DA:174,850 +BRDA:174,6,0,2 +BRDA:174,6,1,848 +FNF:13 +FNH:13 +LF:40 +LH:40 +BRF:11 +BRH:11 end_of_record TN: SF:src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol -DA:51,275 -FN:51,RuleAddressSet.addAddresses +DA:40,275 +FN:40,RuleAddressSet.onlyAddressListAdd +FNDA:275,RuleAddressSet.onlyAddressListAdd +DA:41,275 +DA:45,12 +FN:45,RuleAddressSet.onlyAddressListRemove +FNDA:12,RuleAddressSet.onlyAddressListRemove +DA:46,12 +DA:50,0 +FN:50,RuleAddressSet._authorizeAddressListAdd +FNDA:0,RuleAddressSet._authorizeAddressListAdd +DA:52,0 +FN:52,RuleAddressSet._authorizeAddressListRemove +FNDA:0,RuleAddressSet._authorizeAddressListRemove +DA:65,275 +FN:65,RuleAddressSet.addAddresses FNDA:275,RuleAddressSet.addAddresses -DA:52,274 -DA:53,274 -DA:63,260 -FN:63,RuleAddressSet.removeAddresses +DA:66,274 +DA:67,274 +DA:77,260 +FN:77,RuleAddressSet.removeAddresses FNDA:260,RuleAddressSet.removeAddresses -DA:64,259 -DA:65,259 -DA:75,117 -FN:75,RuleAddressSet.addAddress +DA:78,259 +DA:79,259 +DA:89,117 +FN:89,RuleAddressSet.addAddress FNDA:117,RuleAddressSet.addAddress -DA:76,112 -BRDA:76,0,0,1 -BRDA:76,0,1,111 -DA:77,111 -DA:78,111 -DA:88,12 -FN:88,RuleAddressSet.removeAddress +DA:90,112 +BRDA:90,0,0,1 +BRDA:90,0,1,111 +DA:91,111 +DA:92,111 +DA:102,12 +FN:102,RuleAddressSet.removeAddress FNDA:12,RuleAddressSet.removeAddress -DA:89,7 -BRDA:89,1,0,1 -BRDA:89,1,1,6 -DA:90,6 -DA:91,6 -DA:98,275 -FN:98,RuleAddressSet.onlyAddressListAdd -FNDA:275,RuleAddressSet.onlyAddressListAdd -DA:99,275 -DA:103,12 -FN:103,RuleAddressSet.onlyAddressListRemove -FNDA:12,RuleAddressSet.onlyAddressListRemove -DA:104,12 -DA:116,536 -FN:116,RuleAddressSet.listedAddressCount +DA:103,7 +BRDA:103,1,0,1 +BRDA:103,1,1,6 +DA:104,6 +DA:105,6 +DA:112,536 +FN:112,RuleAddressSet.listedAddressCount FNDA:536,RuleAddressSet.listedAddressCount -DA:117,536 -DA:125,2 -FN:125,RuleAddressSet.contains +DA:113,536 +DA:121,2 +FN:121,RuleAddressSet.contains FNDA:2,RuleAddressSet.contains -DA:126,2 -DA:134,71 -FN:134,RuleAddressSet.isAddressListed -FNDA:71,RuleAddressSet.isAddressListed -DA:135,391 -DA:143,108 -FN:143,RuleAddressSet.areAddressesListed +DA:122,2 +DA:130,73 +FN:130,RuleAddressSet.isAddressListed +FNDA:73,RuleAddressSet.isAddressListed +DA:131,393 +DA:139,108 +FN:139,RuleAddressSet.areAddressesListed FNDA:108,RuleAddressSet.areAddressesListed -DA:144,108 -DA:145,108 -DA:146,244 -DA:155,929 -FN:155,RuleAddressSet._msgSender -FNDA:929,RuleAddressSet._msgSender -DA:156,929 -DA:160,6 -FN:160,RuleAddressSet._msgData +DA:140,108 +DA:141,108 +DA:142,244 +DA:151,931 +FN:151,RuleAddressSet._msgSender +FNDA:931,RuleAddressSet._msgSender +DA:152,931 +DA:156,6 +FN:156,RuleAddressSet._msgData FNDA:6,RuleAddressSet._msgData -DA:161,6 -DA:165,937 -FN:165,RuleAddressSet._contextSuffixLength -FNDA:937,RuleAddressSet._contextSuffixLength -DA:166,937 -FNF:13 +DA:157,6 +DA:161,939 +FN:161,RuleAddressSet._contextSuffixLength +FNDA:939,RuleAddressSet._contextSuffixLength +DA:162,939 +FNF:15 FNH:13 -LF:34 +LF:36 LH:34 BRF:4 BRH:4 @@ -307,10 +341,10 @@ BRDA:62,1,0,518 BRDA:62,1,1,257 DA:63,518 DA:65,257 -DA:74,111 +DA:74,113 FN:74,RuleAddressSetInternal._addAddress -FNDA:111,RuleAddressSetInternal._addAddress -DA:75,111 +FNDA:113,RuleAddressSetInternal._addAddress +DA:75,113 DA:82,6 FN:82,RuleAddressSetInternal._removeAddress FNDA:6,RuleAddressSetInternal._removeAddress @@ -319,10 +353,10 @@ DA:90,536 FN:90,RuleAddressSetInternal._listedAddressCount FNDA:536,RuleAddressSetInternal._listedAddressCount DA:91,536 -DA:99,771 +DA:99,773 FN:99,RuleAddressSetInternal._isAddressListed -FNDA:771,RuleAddressSetInternal._isAddressListed -DA:100,771 +FNDA:773,RuleAddressSetInternal._isAddressListed +DA:100,773 FNF:6 FNH:6 LF:18 @@ -350,18 +384,18 @@ BRDA:51,1,0,2 BRDA:51,1,1,1 DA:52,2 DA:54,1 -DA:59,39 +DA:59,43 FN:59,RuleERC2980Internal._addWhitelistAddress -FNDA:39,RuleERC2980Internal._addWhitelistAddress -DA:60,39 +FNDA:43,RuleERC2980Internal._addWhitelistAddress +DA:60,43 DA:63,4 FN:63,RuleERC2980Internal._removeWhitelistAddress FNDA:4,RuleERC2980Internal._removeWhitelistAddress DA:64,4 -DA:67,82 +DA:67,89 FN:67,RuleERC2980Internal._isWhitelisted -FNDA:82,RuleERC2980Internal._isWhitelisted -DA:68,82 +FNDA:89,RuleERC2980Internal._isWhitelisted +DA:68,89 DA:71,5 FN:71,RuleERC2980Internal._whitelistCount FNDA:5,RuleERC2980Internal._whitelistCount @@ -392,10 +426,10 @@ DA:109,4 FN:109,RuleERC2980Internal._removeFrozenlistAddress FNDA:4,RuleERC2980Internal._removeFrozenlistAddress DA:110,4 -DA:113,90 +DA:113,94 FN:113,RuleERC2980Internal._isFrozen -FNDA:90,RuleERC2980Internal._isFrozen -DA:114,90 +FNDA:94,RuleERC2980Internal._isFrozen +DA:114,94 DA:117,4 FN:117,RuleERC2980Internal._frozenlistCount FNDA:4,RuleERC2980Internal._frozenlistCount @@ -409,71 +443,71 @@ BRH:8 end_of_record TN: SF:src/rules/validation/abstract/base/RuleBlacklistBase.sol -DA:20,106 -FN:20,RuleBlacklistBase._detectTransferRestriction -FNDA:106,RuleBlacklistBase._detectTransferRestriction -DA:30,106 -BRDA:30,0,0,23 -BRDA:30,0,1,64 -DA:31,23 -DA:32,83 -BRDA:32,1,0,19 -DA:33,19 -DA:35,64 -DA:38,22 -FN:38,RuleBlacklistBase._detectTransferRestrictionFrom -FNDA:22,RuleBlacklistBase._detectTransferRestrictionFrom -DA:44,22 -BRDA:44,2,0,8 -DA:45,8 -DA:47,14 -DA:50,4 -FN:50,RuleBlacklistBase.canReturnTransferRestrictionCode +DA:32,58 +FN:32,RuleBlacklistBase.transferred.0 +FNDA:58,RuleBlacklistBase.transferred.0 +DA:38,58 +DA:45,2 +FN:45,RuleBlacklistBase.transferred.1 +FNDA:2,RuleBlacklistBase.transferred.1 +DA:51,2 +DA:54,4 +FN:54,RuleBlacklistBase.canReturnTransferRestrictionCode FNDA:4,RuleBlacklistBase.canReturnTransferRestrictionCode -DA:57,4 -DA:58,1 -DA:61,12 -FN:61,RuleBlacklistBase.messageForTransferRestriction +DA:61,4 +DA:62,1 +DA:65,12 +FN:65,RuleBlacklistBase.messageForTransferRestriction FNDA:12,RuleBlacklistBase.messageForTransferRestriction -DA:68,12 -BRDA:68,3,0,5 -BRDA:68,3,1,3 -DA:69,5 -DA:70,7 -BRDA:70,4,0,3 -BRDA:70,4,1,3 -DA:71,3 -DA:72,4 -BRDA:72,5,0,1 -BRDA:72,5,1,3 -DA:73,1 +DA:72,12 +BRDA:72,0,0,5 +BRDA:72,0,1,3 +DA:73,5 +DA:74,7 +BRDA:74,1,0,3 +BRDA:74,1,1,3 DA:75,3 -DA:79,61 -FN:79,RuleBlacklistBase.supportsInterface +DA:76,4 +BRDA:76,2,0,1 +BRDA:76,2,1,3 +DA:77,1 +DA:79,3 +DA:83,61 +FN:83,RuleBlacklistBase.supportsInterface FNDA:61,RuleBlacklistBase.supportsInterface -DA:80,61 -DA:87,58 -FN:87,RuleBlacklistBase.transferred.0 -FNDA:58,RuleBlacklistBase.transferred.0 -DA:93,58 -DA:100,2 -FN:100,RuleBlacklistBase.transferred.1 -FNDA:2,RuleBlacklistBase.transferred.1 -DA:106,2 -DA:109,61 -FN:109,RuleBlacklistBase._transferred +DA:84,61 +DA:91,106 +FN:91,RuleBlacklistBase._detectTransferRestriction +FNDA:106,RuleBlacklistBase._detectTransferRestriction +DA:101,106 +BRDA:101,3,0,23 +BRDA:101,3,1,64 +DA:102,23 +DA:103,83 +BRDA:103,4,0,19 +DA:104,19 +DA:106,64 +DA:109,22 +FN:109,RuleBlacklistBase._detectTransferRestrictionFrom +FNDA:22,RuleBlacklistBase._detectTransferRestrictionFrom +DA:115,22 +BRDA:115,5,0,8 +DA:116,8 +DA:118,14 +DA:121,61 +FN:121,RuleBlacklistBase._transferred FNDA:61,RuleBlacklistBase._transferred -DA:110,61 -DA:111,61 -BRDA:111,6,0,15 -BRDA:111,6,1,46 -DA:117,4 -FN:117,RuleBlacklistBase._transferredFrom +DA:122,61 +DA:123,61 +BRDA:123,6,0,15 +BRDA:123,6,1,46 +DA:129,4 +FN:129,RuleBlacklistBase._transferredFrom FNDA:4,RuleBlacklistBase._transferredFrom -DA:118,4 -DA:119,4 -BRDA:119,7,0,2 -BRDA:119,7,1,2 +DA:130,4 +DA:131,4 +BRDA:131,7,0,2 +BRDA:131,7,1,2 FNF:9 FNH:9 LF:33 @@ -483,530 +517,558 @@ BRH:14 end_of_record TN: SF:src/rules/validation/abstract/base/RuleERC2980Base.sol -DA:47,22 -FN:47,RuleERC2980Base._detectTransferRestriction -FNDA:22,RuleERC2980Base._detectTransferRestriction -DA:59,22 -BRDA:59,0,0,4 -BRDA:59,0,1,14 -DA:60,4 -DA:61,18 -BRDA:61,1,0,4 -DA:62,4 -DA:65,14 -BRDA:65,2,0,4 -DA:66,4 -DA:68,10 -DA:71,8 -FN:71,RuleERC2980Base._detectTransferRestrictionFrom -FNDA:8,RuleERC2980Base._detectTransferRestrictionFrom -DA:78,8 -BRDA:78,3,0,4 -DA:79,4 -DA:81,4 -DA:88,4 -FN:88,RuleERC2980Base.transferred.0 -FNDA:4,RuleERC2980Base.transferred.0 -DA:94,4 -DA:97,2 -FN:97,RuleERC2980Base.transferred.1 -FNDA:2,RuleERC2980Base.transferred.1 -DA:103,2 -DA:106,5 -FN:106,RuleERC2980Base._transferred -FNDA:5,RuleERC2980Base._transferred -DA:107,5 -DA:108,5 -BRDA:108,4,0,3 -BRDA:108,4,1,2 -DA:114,3 -FN:114,RuleERC2980Base._transferredFrom -FNDA:3,RuleERC2980Base._transferredFrom -DA:115,3 -DA:116,3 -BRDA:116,5,0,1 -BRDA:116,5,1,2 -DA:126,5 -FN:126,RuleERC2980Base.canReturnTransferRestrictionCode -FNDA:5,RuleERC2980Base.canReturnTransferRestrictionCode -DA:133,5 -DA:134,3 -DA:137,5 -FN:137,RuleERC2980Base.messageForTransferRestriction -FNDA:5,RuleERC2980Base.messageForTransferRestriction -DA:144,5 -BRDA:144,6,0,1 -BRDA:144,6,1,1 -DA:145,1 -DA:146,4 -BRDA:146,7,0,1 -BRDA:146,7,1,1 -DA:147,1 -DA:148,3 -BRDA:148,8,0,1 -BRDA:148,8,1,1 -DA:149,1 -DA:150,2 -BRDA:150,9,0,1 -BRDA:150,9,1,1 -DA:151,1 -DA:153,1 -DA:165,6 -FN:165,RuleERC2980Base.addWhitelistAddresses +DA:41,67 +FN:41,RuleERC2980Base.constructor +FNDA:67,RuleERC2980Base.constructor +DA:42,2 +BRDA:42,0,0,2 +DA:43,2 +DA:44,2 +DA:52,6 +FN:52,RuleERC2980Base.onlyWhitelistAdd +FNDA:6,RuleERC2980Base.onlyWhitelistAdd +DA:53,6 +DA:57,7 +FN:57,RuleERC2980Base.onlyWhitelistRemove +FNDA:7,RuleERC2980Base.onlyWhitelistRemove +DA:58,7 +DA:62,6 +FN:62,RuleERC2980Base.onlyFrozenlistAdd +FNDA:6,RuleERC2980Base.onlyFrozenlistAdd +DA:63,6 +DA:67,2 +FN:67,RuleERC2980Base.onlyFrozenlistRemove +FNDA:2,RuleERC2980Base.onlyFrozenlistRemove +DA:68,2 +DA:72,0 +FN:72,RuleERC2980Base._authorizeWhitelistAdd +FNDA:0,RuleERC2980Base._authorizeWhitelistAdd +DA:73,0 +FN:73,RuleERC2980Base._authorizeWhitelistRemove +FNDA:0,RuleERC2980Base._authorizeWhitelistRemove +DA:74,0 +FN:74,RuleERC2980Base._authorizeFrozenlistAdd +FNDA:0,RuleERC2980Base._authorizeFrozenlistAdd +DA:75,0 +FN:75,RuleERC2980Base._authorizeFrozenlistRemove +FNDA:0,RuleERC2980Base._authorizeFrozenlistRemove +DA:85,6 +FN:85,RuleERC2980Base.addWhitelistAddresses FNDA:6,RuleERC2980Base.addWhitelistAddresses -DA:166,4 -DA:167,4 -DA:174,4 -FN:174,RuleERC2980Base.removeWhitelistAddresses +DA:86,4 +DA:87,4 +DA:94,4 +FN:94,RuleERC2980Base.removeWhitelistAddresses FNDA:4,RuleERC2980Base.removeWhitelistAddresses -DA:175,3 -DA:176,3 -DA:187,43 -FN:187,RuleERC2980Base.addWhitelistAddress -FNDA:43,RuleERC2980Base.addWhitelistAddress -DA:188,40 -BRDA:188,10,0,1 -BRDA:188,10,1,39 -DA:189,39 -DA:190,39 -DA:201,7 -FN:201,RuleERC2980Base.removeWhitelistAddress +DA:95,3 +DA:96,3 +DA:107,45 +FN:107,RuleERC2980Base.addWhitelistAddress +FNDA:45,RuleERC2980Base.addWhitelistAddress +DA:108,42 +BRDA:108,1,0,1 +BRDA:108,1,1,41 +DA:109,41 +DA:110,41 +DA:121,7 +FN:121,RuleERC2980Base.removeWhitelistAddress FNDA:7,RuleERC2980Base.removeWhitelistAddress -DA:202,5 -BRDA:202,11,0,1 -BRDA:202,11,1,4 -DA:203,4 -DA:204,4 -DA:210,5 -FN:210,RuleERC2980Base.whitelistAddressCount -FNDA:5,RuleERC2980Base.whitelistAddressCount -DA:211,5 -DA:217,13 -FN:217,RuleERC2980Base.isWhitelisted -FNDA:13,RuleERC2980Base.isWhitelisted -DA:218,13 -DA:224,5 -FN:224,RuleERC2980Base.whitelist -FNDA:5,RuleERC2980Base.whitelist -DA:225,5 -DA:233,3 -FN:233,RuleERC2980Base.isVerified -FNDA:3,RuleERC2980Base.isVerified -DA:234,3 -DA:240,1 -FN:240,RuleERC2980Base.areWhitelisted -FNDA:1,RuleERC2980Base.areWhitelisted -DA:241,1 -DA:242,1 -DA:243,2 -DA:255,6 -FN:255,RuleERC2980Base.addFrozenlistAddresses +DA:122,5 +BRDA:122,2,0,1 +BRDA:122,2,1,4 +DA:123,4 +DA:124,4 +DA:135,6 +FN:135,RuleERC2980Base.addFrozenlistAddresses FNDA:6,RuleERC2980Base.addFrozenlistAddresses -DA:256,4 -DA:257,4 -DA:264,2 -FN:264,RuleERC2980Base.removeFrozenlistAddresses +DA:136,4 +DA:137,4 +DA:144,2 +FN:144,RuleERC2980Base.removeFrozenlistAddresses FNDA:2,RuleERC2980Base.removeFrozenlistAddresses -DA:265,2 -DA:266,2 -DA:277,22 -FN:277,RuleERC2980Base.addFrozenlistAddress +DA:145,2 +DA:146,2 +DA:157,22 +FN:157,RuleERC2980Base.addFrozenlistAddress FNDA:22,RuleERC2980Base.addFrozenlistAddress -DA:278,19 -BRDA:278,12,0,1 -BRDA:278,12,1,18 -DA:279,18 -DA:280,18 -DA:291,7 -FN:291,RuleERC2980Base.removeFrozenlistAddress +DA:158,19 +BRDA:158,3,0,1 +BRDA:158,3,1,18 +DA:159,18 +DA:160,18 +DA:171,7 +FN:171,RuleERC2980Base.removeFrozenlistAddress FNDA:7,RuleERC2980Base.removeFrozenlistAddress -DA:292,5 -BRDA:292,13,0,1 -BRDA:292,13,1,4 -DA:293,4 -DA:294,4 -DA:300,4 -FN:300,RuleERC2980Base.frozenlistAddressCount +DA:172,5 +BRDA:172,4,0,1 +BRDA:172,4,1,4 +DA:173,4 +DA:174,4 +DA:181,4 +FN:181,RuleERC2980Base.transferred.0 +FNDA:4,RuleERC2980Base.transferred.0 +DA:187,4 +DA:190,2 +FN:190,RuleERC2980Base.transferred.1 +FNDA:2,RuleERC2980Base.transferred.1 +DA:196,2 +DA:199,5 +FN:199,RuleERC2980Base.canReturnTransferRestrictionCode +FNDA:5,RuleERC2980Base.canReturnTransferRestrictionCode +DA:206,5 +DA:207,3 +DA:210,5 +FN:210,RuleERC2980Base.messageForTransferRestriction +FNDA:5,RuleERC2980Base.messageForTransferRestriction +DA:217,5 +BRDA:217,5,0,1 +BRDA:217,5,1,1 +DA:218,1 +DA:219,4 +BRDA:219,6,0,1 +BRDA:219,6,1,1 +DA:220,1 +DA:221,3 +BRDA:221,7,0,1 +BRDA:221,7,1,1 +DA:222,1 +DA:223,2 +BRDA:223,8,0,1 +BRDA:223,8,1,1 +DA:224,1 +DA:226,1 +DA:230,1 +FN:230,RuleERC2980Base.supportsInterface +FNDA:1,RuleERC2980Base.supportsInterface +DA:231,1 +DA:237,5 +FN:237,RuleERC2980Base.whitelistAddressCount +FNDA:5,RuleERC2980Base.whitelistAddressCount +DA:238,5 +DA:244,14 +FN:244,RuleERC2980Base.isWhitelisted +FNDA:14,RuleERC2980Base.isWhitelisted +DA:245,14 +DA:251,7 +FN:251,RuleERC2980Base.whitelist +FNDA:7,RuleERC2980Base.whitelist +DA:252,7 +DA:260,3 +FN:260,RuleERC2980Base.isVerified +FNDA:3,RuleERC2980Base.isVerified +DA:261,3 +DA:267,1 +FN:267,RuleERC2980Base.areWhitelisted +FNDA:1,RuleERC2980Base.areWhitelisted +DA:268,1 +DA:269,1 +DA:270,2 +DA:277,4 +FN:277,RuleERC2980Base.frozenlistAddressCount FNDA:4,RuleERC2980Base.frozenlistAddressCount -DA:301,4 -DA:307,12 -FN:307,RuleERC2980Base.isFrozen +DA:278,4 +DA:284,12 +FN:284,RuleERC2980Base.isFrozen FNDA:12,RuleERC2980Base.isFrozen -DA:308,12 -DA:314,4 -FN:314,RuleERC2980Base.frozenlist +DA:285,12 +DA:291,4 +FN:291,RuleERC2980Base.frozenlist FNDA:4,RuleERC2980Base.frozenlist -DA:315,4 -DA:321,1 -FN:321,RuleERC2980Base.areFrozen +DA:292,4 +DA:298,1 +FN:298,RuleERC2980Base.areFrozen FNDA:1,RuleERC2980Base.areFrozen -DA:322,1 -DA:323,1 -DA:324,2 -DA:332,1 -FN:332,RuleERC2980Base.supportsInterface -FNDA:1,RuleERC2980Base.supportsInterface -DA:333,1 -DA:340,6 -FN:340,RuleERC2980Base.onlyWhitelistAdd -FNDA:6,RuleERC2980Base.onlyWhitelistAdd -DA:341,6 -DA:345,7 -FN:345,RuleERC2980Base.onlyWhitelistRemove -FNDA:7,RuleERC2980Base.onlyWhitelistRemove -DA:346,7 -DA:350,6 -FN:350,RuleERC2980Base.onlyFrozenlistAdd -FNDA:6,RuleERC2980Base.onlyFrozenlistAdd -DA:351,6 -DA:355,2 -FN:355,RuleERC2980Base.onlyFrozenlistRemove -FNDA:2,RuleERC2980Base.onlyFrozenlistRemove -DA:356,2 -DA:369,267 -FN:369,RuleERC2980Base._msgSender -FNDA:267,RuleERC2980Base._msgSender -DA:370,267 -DA:373,2 -FN:373,RuleERC2980Base._msgData +DA:299,1 +DA:300,1 +DA:301,2 +DA:309,24 +FN:309,RuleERC2980Base._detectTransferRestriction +FNDA:24,RuleERC2980Base._detectTransferRestriction +DA:321,24 +BRDA:321,9,0,4 +BRDA:321,9,1,16 +DA:322,4 +DA:323,20 +BRDA:323,10,0,4 +DA:324,4 +DA:327,16 +BRDA:327,11,0,5 +DA:328,5 +DA:330,11 +DA:333,8 +FN:333,RuleERC2980Base._detectTransferRestrictionFrom +FNDA:8,RuleERC2980Base._detectTransferRestrictionFrom +DA:340,8 +BRDA:340,12,0,4 +DA:341,4 +DA:343,4 +DA:346,5 +FN:346,RuleERC2980Base._transferred +FNDA:5,RuleERC2980Base._transferred +DA:347,5 +DA:348,5 +BRDA:348,13,0,3 +BRDA:348,13,1,2 +DA:354,3 +FN:354,RuleERC2980Base._transferredFrom +FNDA:3,RuleERC2980Base._transferredFrom +DA:355,3 +DA:356,3 +BRDA:356,14,0,1 +BRDA:356,14,1,2 +DA:362,272 +FN:362,RuleERC2980Base._msgSender +FNDA:272,RuleERC2980Base._msgSender +DA:363,272 +DA:366,2 +FN:366,RuleERC2980Base._msgData FNDA:2,RuleERC2980Base._msgData -DA:374,2 -DA:377,269 -FN:377,RuleERC2980Base._contextSuffixLength -FNDA:269,RuleERC2980Base._contextSuffixLength -DA:378,269 -FNF:33 -FNH:33 -LF:101 -LH:101 -BRF:25 -BRH:25 +DA:367,2 +DA:370,274 +FN:370,RuleERC2980Base._contextSuffixLength +FNDA:274,RuleERC2980Base._contextSuffixLength +DA:371,274 +FNF:38 +FNH:34 +LF:109 +LH:105 +BRF:26 +BRH:26 end_of_record TN: SF:src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol -DA:19,26 -FN:19,RuleIdentityRegistryBase.constructor +DA:23,26 +FN:23,RuleIdentityRegistryBase.constructor FNDA:26,RuleIdentityRegistryBase.constructor -DA:20,26 -BRDA:20,0,0,25 -DA:21,25 -DA:25,4 -FN:25,RuleIdentityRegistryBase.setIdentityRegistry +DA:24,26 +BRDA:24,0,0,25 +DA:25,25 +DA:33,5 +FN:33,RuleIdentityRegistryBase.onlyIdentityRegistryManager +FNDA:5,RuleIdentityRegistryBase.onlyIdentityRegistryManager +DA:34,5 +DA:38,0 +FN:38,RuleIdentityRegistryBase._authorizeIdentityRegistryManager +FNDA:0,RuleIdentityRegistryBase._authorizeIdentityRegistryManager +DA:44,4 +FN:44,RuleIdentityRegistryBase.canReturnTransferRestrictionCode +FNDA:4,RuleIdentityRegistryBase.canReturnTransferRestrictionCode +DA:45,4 +DA:46,2 +DA:53,4 +FN:53,RuleIdentityRegistryBase.setIdentityRegistry FNDA:4,RuleIdentityRegistryBase.setIdentityRegistry -DA:26,2 -BRDA:26,1,0,1 -BRDA:26,1,1,1 -DA:27,1 -DA:28,1 -DA:31,5 -FN:31,RuleIdentityRegistryBase.clearIdentityRegistry +DA:54,2 +BRDA:54,1,0,1 +BRDA:54,1,1,1 +DA:55,1 +DA:56,1 +DA:59,5 +FN:59,RuleIdentityRegistryBase.clearIdentityRegistry FNDA:5,RuleIdentityRegistryBase.clearIdentityRegistry -DA:32,3 -DA:33,3 -DA:36,16 -FN:36,RuleIdentityRegistryBase._detectTransferRestriction -FNDA:16,RuleIdentityRegistryBase._detectTransferRestriction -DA:46,16 -BRDA:46,2,0,3 -DA:47,3 -DA:49,13 -BRDA:49,3,0,2 -DA:50,2 -DA:53,11 -BRDA:53,4,0,4 -DA:54,4 -DA:56,7 -BRDA:56,5,0,1 -DA:57,1 -DA:59,6 -DA:62,9 -FN:62,RuleIdentityRegistryBase._detectTransferRestrictionFrom -FNDA:9,RuleIdentityRegistryBase._detectTransferRestrictionFrom -DA:68,9 -BRDA:68,6,0,1 -DA:69,1 -DA:71,8 -BRDA:71,7,0,1 -DA:72,1 -DA:74,7 -BRDA:74,8,0,4 -DA:75,4 -DA:77,3 -DA:80,2 -FN:80,RuleIdentityRegistryBase.transferred.0 +DA:60,3 +DA:61,3 +DA:64,2 +FN:64,RuleIdentityRegistryBase.transferred.0 FNDA:2,RuleIdentityRegistryBase.transferred.0 -DA:81,2 -DA:84,2 -FN:84,RuleIdentityRegistryBase.transferred.1 +DA:65,2 +DA:68,2 +FN:68,RuleIdentityRegistryBase.transferred.1 FNDA:2,RuleIdentityRegistryBase.transferred.1 -DA:85,2 -DA:88,2 -FN:88,RuleIdentityRegistryBase._transferred +DA:69,2 +DA:72,4 +FN:72,RuleIdentityRegistryBase.messageForTransferRestriction +FNDA:4,RuleIdentityRegistryBase.messageForTransferRestriction +DA:78,4 +BRDA:78,2,0,1 +BRDA:78,2,1,1 +DA:79,1 +DA:80,3 +BRDA:80,3,0,1 +BRDA:80,3,1,1 +DA:81,1 +DA:82,2 +BRDA:82,4,0,1 +DA:83,1 +DA:85,1 +DA:92,16 +FN:92,RuleIdentityRegistryBase._detectTransferRestriction +FNDA:16,RuleIdentityRegistryBase._detectTransferRestriction +DA:102,16 +BRDA:102,5,0,3 +DA:103,3 +DA:105,13 +BRDA:105,6,0,2 +DA:106,2 +DA:109,11 +BRDA:109,7,0,4 +DA:110,4 +DA:112,7 +BRDA:112,8,0,1 +DA:113,1 +DA:115,6 +DA:118,9 +FN:118,RuleIdentityRegistryBase._detectTransferRestrictionFrom +FNDA:9,RuleIdentityRegistryBase._detectTransferRestrictionFrom +DA:124,9 +BRDA:124,9,0,1 +DA:125,1 +DA:127,8 +BRDA:127,10,0,1 +DA:128,1 +DA:130,7 +BRDA:130,11,0,4 +DA:131,4 +DA:133,3 +DA:136,2 +FN:136,RuleIdentityRegistryBase._transferred FNDA:2,RuleIdentityRegistryBase._transferred -DA:89,2 -DA:90,2 -BRDA:90,9,0,1 -BRDA:90,9,1,1 -DA:96,2 -FN:96,RuleIdentityRegistryBase._transferredFrom +DA:137,2 +DA:138,2 +BRDA:138,12,0,1 +BRDA:138,12,1,1 +DA:144,2 +FN:144,RuleIdentityRegistryBase._transferredFrom FNDA:2,RuleIdentityRegistryBase._transferredFrom -DA:97,2 -DA:98,2 -BRDA:98,10,0,1 -BRDA:98,10,1,1 -DA:104,4 -FN:104,RuleIdentityRegistryBase.canReturnTransferRestrictionCode -FNDA:4,RuleIdentityRegistryBase.canReturnTransferRestrictionCode -DA:105,4 -DA:106,2 -DA:109,4 -FN:109,RuleIdentityRegistryBase.messageForTransferRestriction -FNDA:4,RuleIdentityRegistryBase.messageForTransferRestriction -DA:115,4 -BRDA:115,11,0,1 -BRDA:115,11,1,1 -DA:116,1 -DA:117,3 -BRDA:117,12,0,1 -BRDA:117,12,1,1 -DA:118,1 -DA:119,2 -BRDA:119,13,0,1 -DA:120,1 -DA:122,1 -DA:129,5 -FN:129,RuleIdentityRegistryBase.onlyIdentityRegistryManager -FNDA:5,RuleIdentityRegistryBase.onlyIdentityRegistryManager -DA:130,5 -FNF:12 +DA:145,2 +DA:146,2 +BRDA:146,13,0,1 +BRDA:146,13,1,1 +FNF:13 FNH:12 -LF:51 +LF:52 LH:51 BRF:19 BRH:19 end_of_record TN: SF:src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol -DA:20,25 -FN:20,RuleMaxTotalSupplyBase.constructor +DA:24,25 +FN:24,RuleMaxTotalSupplyBase.constructor FNDA:25,RuleMaxTotalSupplyBase.constructor -DA:21,25 -BRDA:21,0,0,1 -BRDA:21,0,1,24 -DA:22,24 -DA:23,24 -DA:26,260 -FN:26,RuleMaxTotalSupplyBase.setMaxTotalSupply +DA:25,25 +BRDA:25,0,0,1 +BRDA:25,0,1,24 +DA:26,24 +DA:27,24 +DA:34,2 +FN:34,RuleMaxTotalSupplyBase.canReturnTransferRestrictionCode +FNDA:2,RuleMaxTotalSupplyBase.canReturnTransferRestrictionCode +DA:35,2 +DA:42,260 +FN:42,RuleMaxTotalSupplyBase.setMaxTotalSupply FNDA:260,RuleMaxTotalSupplyBase.setMaxTotalSupply -DA:27,258 -DA:28,258 -DA:31,4 -FN:31,RuleMaxTotalSupplyBase.setTokenContract +DA:43,258 +DA:44,258 +DA:47,4 +FN:47,RuleMaxTotalSupplyBase.setTokenContract FNDA:4,RuleMaxTotalSupplyBase.setTokenContract -DA:32,2 -BRDA:32,1,0,1 -BRDA:32,1,1,1 -DA:33,1 -DA:34,1 -DA:37,271 -FN:37,RuleMaxTotalSupplyBase._detectTransferRestriction -FNDA:271,RuleMaxTotalSupplyBase._detectTransferRestriction -DA:48,271 -BRDA:48,2,0,268 -DA:49,268 -DA:50,268 -BRDA:50,3,0,176 -DA:51,176 -DA:54,95 -DA:57,2 -FN:57,RuleMaxTotalSupplyBase._detectTransferRestrictionFrom -FNDA:2,RuleMaxTotalSupplyBase._detectTransferRestrictionFrom -DA:63,2 -DA:66,2 -FN:66,RuleMaxTotalSupplyBase.transferred.0 +DA:48,2 +BRDA:48,1,0,1 +BRDA:48,1,1,1 +DA:49,1 +DA:50,1 +DA:53,2 +FN:53,RuleMaxTotalSupplyBase.transferred.0 FNDA:2,RuleMaxTotalSupplyBase.transferred.0 -DA:67,2 -DA:70,2 -FN:70,RuleMaxTotalSupplyBase.transferred.1 +DA:54,2 +DA:57,2 +FN:57,RuleMaxTotalSupplyBase.transferred.1 FNDA:2,RuleMaxTotalSupplyBase.transferred.1 -DA:71,2 -DA:74,2 -FN:74,RuleMaxTotalSupplyBase._transferred -FNDA:2,RuleMaxTotalSupplyBase._transferred -DA:75,2 -DA:76,2 -BRDA:76,4,0,1 -BRDA:76,4,1,1 -DA:82,2 -FN:82,RuleMaxTotalSupplyBase._transferredFrom -FNDA:2,RuleMaxTotalSupplyBase._transferredFrom -DA:83,2 -DA:84,2 -BRDA:84,5,0,1 -BRDA:84,5,1,1 -DA:90,2 -FN:90,RuleMaxTotalSupplyBase.canReturnTransferRestrictionCode -FNDA:2,RuleMaxTotalSupplyBase.canReturnTransferRestrictionCode -DA:91,2 -DA:94,2 -FN:94,RuleMaxTotalSupplyBase.messageForTransferRestriction +DA:58,2 +DA:61,2 +FN:61,RuleMaxTotalSupplyBase.messageForTransferRestriction FNDA:2,RuleMaxTotalSupplyBase.messageForTransferRestriction -DA:100,2 -BRDA:100,6,0,1 -DA:101,1 -DA:103,1 -DA:110,260 -FN:110,RuleMaxTotalSupplyBase.onlyMaxTotalSupplyManager +DA:67,2 +BRDA:67,2,0,1 +DA:68,1 +DA:70,1 +DA:77,260 +FN:77,RuleMaxTotalSupplyBase.onlyMaxTotalSupplyManager FNDA:260,RuleMaxTotalSupplyBase.onlyMaxTotalSupplyManager -DA:111,260 -FNF:12 +DA:78,260 +DA:82,0 +FN:82,RuleMaxTotalSupplyBase._authorizeMaxTotalSupplyManager +FNDA:0,RuleMaxTotalSupplyBase._authorizeMaxTotalSupplyManager +DA:88,271 +FN:88,RuleMaxTotalSupplyBase._detectTransferRestriction +FNDA:271,RuleMaxTotalSupplyBase._detectTransferRestriction +DA:99,271 +BRDA:99,3,0,268 +DA:100,268 +DA:101,268 +BRDA:101,4,0,186 +DA:102,186 +DA:105,85 +DA:108,2 +FN:108,RuleMaxTotalSupplyBase._detectTransferRestrictionFrom +FNDA:2,RuleMaxTotalSupplyBase._detectTransferRestrictionFrom +DA:114,2 +DA:117,2 +FN:117,RuleMaxTotalSupplyBase._transferred +FNDA:2,RuleMaxTotalSupplyBase._transferred +DA:118,2 +DA:119,2 +BRDA:119,5,0,1 +BRDA:119,5,1,1 +DA:125,2 +FN:125,RuleMaxTotalSupplyBase._transferredFrom +FNDA:2,RuleMaxTotalSupplyBase._transferredFrom +DA:126,2 +DA:127,2 +BRDA:127,6,0,1 +BRDA:127,6,1,1 +FNF:13 FNH:12 -LF:37 +LF:38 LH:37 BRF:11 BRH:11 end_of_record TN: SF:src/rules/validation/abstract/base/RuleSanctionsListBase.sol -DA:20,46 -FN:20,RuleSanctionsListBase.constructor +DA:24,46 +FN:24,RuleSanctionsListBase.constructor FNDA:46,RuleSanctionsListBase.constructor -DA:23,45 -BRDA:23,0,0,20 -DA:24,20 -DA:28,84 -FN:28,RuleSanctionsListBase._detectTransferRestriction -FNDA:84,RuleSanctionsListBase._detectTransferRestriction -DA:38,84 -BRDA:38,1,0,77 -DA:39,77 -BRDA:39,2,0,10 -BRDA:39,2,1,55 -DA:40,10 -DA:41,67 -BRDA:41,3,0,12 -DA:42,12 -DA:45,62 -DA:48,16 -FN:48,RuleSanctionsListBase._detectTransferRestrictionFrom -FNDA:16,RuleSanctionsListBase._detectTransferRestrictionFrom -DA:55,16 -BRDA:55,4,0,15 -DA:56,15 -BRDA:56,5,0,6 -DA:57,6 -DA:59,9 -DA:61,1 -DA:64,3 -FN:64,RuleSanctionsListBase.canReturnTransferRestrictionCode +DA:27,45 +BRDA:27,0,0,20 +DA:28,20 +DA:36,3 +FN:36,RuleSanctionsListBase.canReturnTransferRestrictionCode FNDA:3,RuleSanctionsListBase.canReturnTransferRestrictionCode -DA:65,3 -DA:66,1 -DA:69,4 -FN:69,RuleSanctionsListBase.messageForTransferRestriction -FNDA:4,RuleSanctionsListBase.messageForTransferRestriction -DA:75,4 -BRDA:75,6,0,1 -BRDA:75,6,1,1 -DA:76,1 -DA:77,3 -BRDA:77,7,0,1 -BRDA:77,7,1,1 -DA:78,1 -DA:79,2 -BRDA:79,8,0,1 -DA:80,1 -DA:82,1 -DA:85,17 -FN:85,RuleSanctionsListBase.setSanctionListOracle +DA:37,3 +DA:38,1 +DA:45,17 +FN:45,RuleSanctionsListBase.setSanctionListOracle FNDA:17,RuleSanctionsListBase.setSanctionListOracle -DA:86,15 -BRDA:86,9,0,1 -BRDA:86,9,1,14 -DA:87,14 -DA:90,3 -FN:90,RuleSanctionsListBase.clearSanctionListOracle +DA:46,15 +BRDA:46,1,0,1 +BRDA:46,1,1,14 +DA:47,14 +DA:50,3 +FN:50,RuleSanctionsListBase.clearSanctionListOracle FNDA:3,RuleSanctionsListBase.clearSanctionListOracle -DA:91,3 -DA:94,43 -FN:94,RuleSanctionsListBase.transferred.0 +DA:51,3 +DA:54,43 +FN:54,RuleSanctionsListBase.transferred.0 FNDA:43,RuleSanctionsListBase.transferred.0 -DA:95,43 -DA:98,2 -FN:98,RuleSanctionsListBase.transferred.1 +DA:55,43 +DA:58,2 +FN:58,RuleSanctionsListBase.transferred.1 FNDA:2,RuleSanctionsListBase.transferred.1 -DA:99,2 -DA:102,47 -FN:102,RuleSanctionsListBase._transferred +DA:59,2 +DA:62,4 +FN:62,RuleSanctionsListBase.messageForTransferRestriction +FNDA:4,RuleSanctionsListBase.messageForTransferRestriction +DA:68,4 +BRDA:68,2,0,1 +BRDA:68,2,1,1 +DA:69,1 +DA:70,3 +BRDA:70,3,0,1 +BRDA:70,3,1,1 +DA:71,1 +DA:72,2 +BRDA:72,4,0,1 +DA:73,1 +DA:75,1 +DA:82,3 +FN:82,RuleSanctionsListBase.onlySanctionListManager +FNDA:3,RuleSanctionsListBase.onlySanctionListManager +DA:83,3 +DA:87,0 +FN:87,RuleSanctionsListBase._authorizeSanctionListManager +FNDA:0,RuleSanctionsListBase._authorizeSanctionListManager +DA:93,84 +FN:93,RuleSanctionsListBase._detectTransferRestriction +FNDA:84,RuleSanctionsListBase._detectTransferRestriction +DA:103,84 +BRDA:103,5,0,77 +DA:104,77 +BRDA:104,6,0,10 +BRDA:104,6,1,55 +DA:105,10 +DA:106,67 +BRDA:106,7,0,12 +DA:107,12 +DA:110,62 +DA:113,16 +FN:113,RuleSanctionsListBase._detectTransferRestrictionFrom +FNDA:16,RuleSanctionsListBase._detectTransferRestrictionFrom +DA:120,16 +BRDA:120,8,0,15 +DA:121,15 +BRDA:121,9,0,6 +DA:122,6 +DA:124,9 +DA:126,1 +DA:129,47 +FN:129,RuleSanctionsListBase._transferred FNDA:47,RuleSanctionsListBase._transferred -DA:103,47 -DA:104,47 -BRDA:104,10,0,6 -BRDA:104,10,1,41 -DA:110,3 -FN:110,RuleSanctionsListBase._transferredFrom +DA:130,47 +DA:131,47 +BRDA:131,10,0,6 +BRDA:131,10,1,41 +DA:137,3 +FN:137,RuleSanctionsListBase._transferredFrom FNDA:3,RuleSanctionsListBase._transferredFrom -DA:111,3 -DA:112,3 -BRDA:112,11,0,2 -BRDA:112,11,1,1 -DA:118,37 -FN:118,RuleSanctionsListBase._setSanctionListOracle +DA:138,3 +DA:139,3 +BRDA:139,11,0,2 +BRDA:139,11,1,1 +DA:145,37 +FN:145,RuleSanctionsListBase._setSanctionListOracle FNDA:37,RuleSanctionsListBase._setSanctionListOracle -DA:119,37 -DA:120,37 -DA:127,3 -FN:127,RuleSanctionsListBase.onlySanctionListManager -FNDA:3,RuleSanctionsListBase.onlySanctionListManager -DA:128,3 -FNF:13 +DA:146,37 +DA:147,37 +FNF:14 FNH:13 -LF:47 +LF:48 LH:47 BRF:18 BRH:18 end_of_record TN: SF:src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol -DA:19,4 -FN:19,RuleSpenderWhitelistBase._detectTransferRestriction -FNDA:4,RuleSpenderWhitelistBase._detectTransferRestriction -DA:20,4 -DA:23,13 -FN:23,RuleSpenderWhitelistBase._detectTransferRestrictionFrom -FNDA:13,RuleSpenderWhitelistBase._detectTransferRestrictionFrom -DA:30,13 -BRDA:30,0,0,5 -DA:31,5 -DA:33,8 -DA:36,2 -FN:36,RuleSpenderWhitelistBase.canReturnTransferRestrictionCode +DA:27,2 +FN:27,RuleSpenderWhitelistBase.canReturnTransferRestrictionCode FNDA:2,RuleSpenderWhitelistBase.canReturnTransferRestrictionCode -DA:37,2 -DA:40,2 -FN:40,RuleSpenderWhitelistBase.messageForTransferRestriction -FNDA:2,RuleSpenderWhitelistBase.messageForTransferRestriction -DA:46,2 -BRDA:46,1,0,1 -DA:47,1 -DA:49,1 -DA:55,1 -FN:55,RuleSpenderWhitelistBase.transferred.0 +DA:28,2 +DA:38,1 +FN:38,RuleSpenderWhitelistBase.transferred.0 FNDA:1,RuleSpenderWhitelistBase.transferred.0 -DA:57,2 -FN:57,RuleSpenderWhitelistBase.transferred.1 +DA:40,2 +FN:40,RuleSpenderWhitelistBase.transferred.1 FNDA:2,RuleSpenderWhitelistBase.transferred.1 -DA:58,2 -DA:61,3 -FN:61,RuleSpenderWhitelistBase._transferred +DA:41,2 +DA:44,2 +FN:44,RuleSpenderWhitelistBase.messageForTransferRestriction +FNDA:2,RuleSpenderWhitelistBase.messageForTransferRestriction +DA:50,2 +BRDA:50,0,0,1 +DA:51,1 +DA:53,1 +DA:60,4 +FN:60,RuleSpenderWhitelistBase._detectTransferRestriction +FNDA:4,RuleSpenderWhitelistBase._detectTransferRestriction +DA:61,4 +DA:64,13 +FN:64,RuleSpenderWhitelistBase._detectTransferRestrictionFrom +FNDA:13,RuleSpenderWhitelistBase._detectTransferRestrictionFrom +DA:71,13 +BRDA:71,1,0,5 +DA:72,5 +DA:74,8 +DA:77,3 +FN:77,RuleSpenderWhitelistBase._transferred FNDA:3,RuleSpenderWhitelistBase._transferred -DA:65,7 -FN:65,RuleSpenderWhitelistBase._transferredFrom +DA:81,7 +FN:81,RuleSpenderWhitelistBase._transferredFrom FNDA:7,RuleSpenderWhitelistBase._transferredFrom -DA:66,7 -DA:67,7 -BRDA:67,2,0,3 -BRDA:67,2,1,4 +DA:82,7 +DA:83,7 +BRDA:83,2,0,3 +BRDA:83,2,1,4 FNF:8 FNH:8 LF:19 @@ -1016,298 +1078,324 @@ BRH:4 end_of_record TN: SF:src/rules/validation/abstract/base/RuleWhitelistBase.sol -DA:14,159 -FN:14,RuleWhitelistBase.constructor -FNDA:159,RuleWhitelistBase.constructor -DA:15,159 -DA:18,53 -FN:18,RuleWhitelistBase._detectTransferRestriction -FNDA:53,RuleWhitelistBase._detectTransferRestriction -DA:29,53 -BRDA:29,0,0,13 -BRDA:29,0,1,30 -DA:30,13 -DA:31,40 -BRDA:31,1,0,10 -DA:32,10 -DA:34,30 -DA:37,18 -FN:37,RuleWhitelistBase._detectTransferRestrictionFrom -FNDA:18,RuleWhitelistBase._detectTransferRestrictionFrom -DA:44,18 -BRDA:44,2,0,8 -DA:45,8 -DA:47,10 -DA:50,2 -FN:50,RuleWhitelistBase.isVerified -FNDA:2,RuleWhitelistBase.isVerified -DA:57,2 -DA:60,3 -FN:60,RuleWhitelistBase.setCheckSpender +DA:18,163 +FN:18,RuleWhitelistBase.constructor +FNDA:163,RuleWhitelistBase.constructor +DA:21,163 +DA:22,2 +BRDA:22,0,0,2 +DA:23,2 +DA:24,2 +DA:32,3 +FN:32,RuleWhitelistBase.setCheckSpender FNDA:3,RuleWhitelistBase.setCheckSpender -DA:61,2 -DA:62,2 -DA:65,2 -FN:65,RuleWhitelistBase._setCheckSpender -FNDA:2,RuleWhitelistBase._setCheckSpender -DA:66,2 -DA:69,27 -FN:69,RuleWhitelistBase.supportsInterface +DA:33,2 +DA:34,2 +DA:37,2 +FN:37,RuleWhitelistBase.isVerified +FNDA:2,RuleWhitelistBase.isVerified +DA:44,2 +DA:47,27 +FN:47,RuleWhitelistBase.supportsInterface FNDA:27,RuleWhitelistBase.supportsInterface -DA:70,27 -DA:77,3 -FN:77,RuleWhitelistBase.onlyCheckSpenderManager +DA:48,27 +DA:55,3 +FN:55,RuleWhitelistBase.onlyCheckSpenderManager FNDA:3,RuleWhitelistBase.onlyCheckSpenderManager -DA:78,3 -FNF:8 +DA:56,3 +DA:60,0 +FN:60,RuleWhitelistBase._authorizeCheckSpenderManager +FNDA:0,RuleWhitelistBase._authorizeCheckSpenderManager +DA:66,53 +FN:66,RuleWhitelistBase._detectTransferRestriction +FNDA:53,RuleWhitelistBase._detectTransferRestriction +DA:77,53 +BRDA:77,1,0,13 +BRDA:77,1,1,30 +DA:78,13 +DA:79,40 +BRDA:79,2,0,10 +DA:80,10 +DA:82,30 +DA:85,18 +FN:85,RuleWhitelistBase._detectTransferRestrictionFrom +FNDA:18,RuleWhitelistBase._detectTransferRestrictionFrom +DA:92,18 +BRDA:92,3,0,8 +DA:93,8 +DA:95,10 +DA:98,2 +FN:98,RuleWhitelistBase._setCheckSpender +FNDA:2,RuleWhitelistBase._setCheckSpender +DA:99,2 +FNF:9 FNH:8 -LF:23 -LH:23 -BRF:4 -BRH:4 +LF:27 +LH:26 +BRF:5 +BRH:5 end_of_record TN: SF:src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol -DA:34,44 -FN:34,RuleWhitelistWrapperBase.constructor +DA:31,44 +FN:31,RuleWhitelistWrapperBase.constructor FNDA:44,RuleWhitelistWrapperBase.constructor -DA:35,44 -DA:46,34 -FN:46,RuleWhitelistWrapperBase._detectTransferRestriction +DA:32,44 +DA:39,4 +FN:39,RuleWhitelistWrapperBase.onlyCheckSpenderManager +FNDA:4,RuleWhitelistWrapperBase.onlyCheckSpenderManager +DA:40,4 +DA:44,0 +FN:44,RuleWhitelistWrapperBase._authorizeCheckSpenderManager +FNDA:0,RuleWhitelistWrapperBase._authorizeCheckSpenderManager +DA:58,4 +FN:58,RuleWhitelistWrapperBase.setCheckSpender +FNDA:4,RuleWhitelistWrapperBase.setCheckSpender +DA:59,3 +DA:60,3 +DA:63,46 +FN:63,RuleWhitelistWrapperBase.supportsInterface +FNDA:46,RuleWhitelistWrapperBase.supportsInterface +DA:70,46 +DA:77,4 +FN:77,RuleWhitelistWrapperBase.isVerified +FNDA:4,RuleWhitelistWrapperBase.isVerified +DA:78,4 +DA:79,4 +DA:80,4 +DA:81,4 +DA:95,34 +FN:95,RuleWhitelistWrapperBase._detectTransferRestriction FNDA:34,RuleWhitelistWrapperBase._detectTransferRestriction -DA:57,34 -DA:58,34 -DA:59,34 -DA:61,34 -DA:62,34 -BRDA:62,0,0,13 -BRDA:62,0,1,13 -DA:63,13 -DA:64,21 -BRDA:64,1,0,8 -BRDA:64,1,1,13 -DA:65,8 -DA:67,13 -DA:71,20 -FN:71,RuleWhitelistWrapperBase._detectTransferRestrictionFrom +DA:106,34 +DA:107,34 +DA:108,34 +DA:110,34 +DA:111,34 +BRDA:111,0,0,13 +BRDA:111,0,1,13 +DA:112,13 +DA:113,21 +BRDA:113,1,0,8 +BRDA:113,1,1,13 +DA:114,8 +DA:116,13 +DA:120,20 +FN:120,RuleWhitelistWrapperBase._detectTransferRestrictionFrom FNDA:20,RuleWhitelistWrapperBase._detectTransferRestrictionFrom -DA:78,20 -BRDA:78,2,0,1 -DA:79,1 -DA:82,19 -DA:83,19 -DA:84,19 -DA:85,19 -DA:87,19 -DA:89,19 -BRDA:89,3,0,1 -BRDA:89,3,1,9 -DA:90,1 -DA:91,18 -BRDA:91,4,0,1 -BRDA:91,4,1,9 -DA:92,1 -DA:93,17 -BRDA:93,5,0,8 -BRDA:93,5,1,9 -DA:94,8 -DA:96,9 -DA:102,62 -FN:102,RuleWhitelistWrapperBase.supportsInterface -FNDA:62,RuleWhitelistWrapperBase.supportsInterface -DA:109,62 -DA:116,4 -FN:116,RuleWhitelistWrapperBase.isVerified -FNDA:4,RuleWhitelistWrapperBase.isVerified -DA:117,4 -DA:118,4 -DA:119,4 -DA:120,4 -DA:133,4 -FN:133,RuleWhitelistWrapperBase.setCheckSpender -FNDA:4,RuleWhitelistWrapperBase.setCheckSpender -DA:134,3 -DA:135,3 -DA:138,13 -FN:138,RuleWhitelistWrapperBase._transferred.0 +DA:127,20 +BRDA:127,2,0,1 +DA:128,1 +DA:131,19 +DA:132,19 +DA:133,19 +DA:134,19 +DA:136,19 +DA:138,19 +BRDA:138,3,0,1 +BRDA:138,3,1,9 +DA:139,1 +DA:140,18 +BRDA:140,4,0,1 +BRDA:140,4,1,9 +DA:141,1 +DA:142,17 +BRDA:142,5,0,8 +BRDA:142,5,1,9 +DA:143,8 +DA:145,9 +DA:151,13 +FN:151,RuleWhitelistWrapperBase._transferred.0 FNDA:13,RuleWhitelistWrapperBase._transferred.0 -DA:144,13 -DA:147,1 -FN:147,RuleWhitelistWrapperBase._transferred.1 +DA:157,13 +DA:160,1 +FN:160,RuleWhitelistWrapperBase._transferred.1 FNDA:1,RuleWhitelistWrapperBase._transferred.1 -DA:153,1 -DA:165,57 -FN:165,RuleWhitelistWrapperBase._detectTransferRestrictionForTargets +DA:166,1 +DA:174,57 +FN:174,RuleWhitelistWrapperBase._detectTransferRestrictionForTargets FNDA:57,RuleWhitelistWrapperBase._detectTransferRestrictionForTargets -DA:171,57 -DA:172,57 -DA:173,57 -DA:176,105 -DA:177,105 -DA:178,85 -BRDA:178,6,0,85 -DA:179,85 -DA:184,105 +DA:180,57 +DA:181,57 +DA:182,57 DA:185,105 -DA:186,201 -BRDA:186,7,0,81 -DA:187,81 -DA:188,81 -DA:191,24 -BRDA:191,8,0,24 -DA:192,24 -DA:195,57 -DA:202,3 -FN:202,RuleWhitelistWrapperBase._setCheckSpender +DA:186,105 +DA:187,85 +BRDA:187,6,0,85 +DA:188,85 +DA:193,105 +DA:194,105 +DA:195,201 +BRDA:195,7,0,81 +DA:196,81 +DA:197,81 +DA:200,24 +BRDA:200,8,0,24 +DA:201,24 +DA:204,57 +DA:211,3 +FN:211,RuleWhitelistWrapperBase._setCheckSpender FNDA:3,RuleWhitelistWrapperBase._setCheckSpender -DA:203,3 -DA:210,4 -FN:210,RuleWhitelistWrapperBase.onlyCheckSpenderManager -FNDA:4,RuleWhitelistWrapperBase.onlyCheckSpenderManager -DA:211,4 -DA:224,145 -FN:224,RuleWhitelistWrapperBase._msgSender +DA:212,3 +DA:222,145 +FN:222,RuleWhitelistWrapperBase._msgSender FNDA:145,RuleWhitelistWrapperBase._msgSender -DA:225,145 -DA:231,2 -FN:231,RuleWhitelistWrapperBase._msgData +DA:223,145 +DA:229,2 +FN:229,RuleWhitelistWrapperBase._msgData FNDA:2,RuleWhitelistWrapperBase._msgData -DA:232,2 -DA:238,147 -FN:238,RuleWhitelistWrapperBase._contextSuffixLength +DA:230,2 +DA:236,147 +FN:236,RuleWhitelistWrapperBase._contextSuffixLength FNDA:147,RuleWhitelistWrapperBase._contextSuffixLength -DA:239,147 -FNF:14 +DA:237,147 +FNF:15 FNH:14 -LF:67 +LF:68 LH:67 BRF:14 BRH:14 end_of_record TN: SF:src/rules/validation/abstract/core/RuleNFTAdapter.sol -DA:39,17 -FN:39,RuleNFTAdapter.detectTransferRestriction +DA:34,17 +FN:34,RuleNFTAdapter.detectTransferRestriction FNDA:17,RuleNFTAdapter.detectTransferRestriction -DA:52,17 -DA:58,13 -FN:58,RuleNFTAdapter.detectTransferRestrictionFrom +DA:47,17 +DA:53,13 +FN:53,RuleNFTAdapter.detectTransferRestrictionFrom FNDA:13,RuleNFTAdapter.detectTransferRestrictionFrom -DA:66,13 -DA:72,15 -FN:72,RuleNFTAdapter.canTransfer +DA:61,13 +DA:67,15 +FN:67,RuleNFTAdapter.canTransfer FNDA:15,RuleNFTAdapter.canTransfer -DA:84,15 -DA:90,11 -FN:90,RuleNFTAdapter.canTransferFrom +DA:79,15 +DA:85,11 +FN:85,RuleNFTAdapter.canTransferFrom FNDA:11,RuleNFTAdapter.canTransferFrom -DA:104,11 -DA:111,14 -FN:111,RuleNFTAdapter.transferred.0 +DA:99,11 +DA:106,14 +FN:106,RuleNFTAdapter.transferred.0 FNDA:14,RuleNFTAdapter.transferred.0 -DA:122,14 -DA:128,9 -FN:128,RuleNFTAdapter.transferred.1 +DA:117,14 +DA:123,9 +FN:123,RuleNFTAdapter.transferred.1 FNDA:9,RuleNFTAdapter.transferred.1 -DA:140,9 -DA:146,6 -FN:146,RuleNFTAdapter.transferred.2 +DA:135,9 +DA:141,6 +FN:141,RuleNFTAdapter.transferred.2 FNDA:6,RuleNFTAdapter.transferred.2 -DA:147,6 -BRDA:147,0,0,3 -BRDA:147,0,1,3 -DA:148,3 -DA:150,3 -DA:157,6 -FN:157,RuleNFTAdapter.transferred.3 +DA:142,6 +BRDA:142,0,0,3 +BRDA:142,0,1,3 +DA:143,3 +DA:145,3 +DA:152,6 +FN:152,RuleNFTAdapter.transferred.3 FNDA:6,RuleNFTAdapter.transferred.3 -DA:158,6 -BRDA:158,1,0,3 -BRDA:158,1,1,3 -DA:159,3 -DA:161,3 -FNF:8 +DA:153,6 +BRDA:153,1,0,3 +BRDA:153,1,1,3 +DA:154,3 +DA:156,3 +DA:167,0 +FN:167,RuleNFTAdapter._transferred +FNDA:0,RuleNFTAdapter._transferred +DA:172,0 +FN:172,RuleNFTAdapter._transferredFrom +FNDA:0,RuleNFTAdapter._transferredFrom +FNF:10 FNH:8 -LF:20 +LF:22 LH:20 BRF:4 BRH:4 end_of_record TN: SF:src/rules/validation/abstract/core/RuleTransferValidation.sol -DA:52,349 -FN:52,RuleTransferValidation.detectTransferRestriction -FNDA:349,RuleTransferValidation.detectTransferRestriction -DA:59,349 -DA:65,38 -FN:65,RuleTransferValidation.detectTransferRestrictionFrom +DA:32,351 +FN:32,RuleTransferValidation.detectTransferRestriction +FNDA:351,RuleTransferValidation.detectTransferRestriction +DA:39,351 +DA:45,38 +FN:45,RuleTransferValidation.detectTransferRestrictionFrom FNDA:38,RuleTransferValidation.detectTransferRestrictionFrom -DA:72,38 -DA:83,21 -FN:83,RuleTransferValidation.canTransfer +DA:52,38 +DA:63,21 +FN:63,RuleTransferValidation.canTransfer FNDA:21,RuleTransferValidation.canTransfer -DA:89,21 -DA:95,14 -FN:95,RuleTransferValidation.canTransferFrom +DA:69,21 +DA:75,14 +FN:75,RuleTransferValidation.canTransferFrom FNDA:14,RuleTransferValidation.canTransferFrom -DA:102,14 -DA:106,196 -FN:106,RuleTransferValidation.supportsInterface -FNDA:196,RuleTransferValidation.supportsInterface -DA:107,196 -FNF:5 +DA:82,14 +DA:86,198 +FN:86,RuleTransferValidation.supportsInterface +FNDA:198,RuleTransferValidation.supportsInterface +DA:87,198 +DA:88,197 +DA:89,196 +DA:90,108 +DA:91,108 +DA:105,0 +FN:105,RuleTransferValidation._detectTransferRestriction +FNDA:0,RuleTransferValidation._detectTransferRestriction +DA:119,0 +FN:119,RuleTransferValidation._detectTransferRestrictionFrom +FNDA:0,RuleTransferValidation._detectTransferRestrictionFrom +FNF:7 FNH:5 -LF:10 -LH:10 +LF:16 +LH:14 BRF:0 BRH:0 end_of_record TN: SF:src/rules/validation/abstract/core/RuleWhitelistShared.sol -DA:33,10 -FN:33,RuleWhitelistShared.canReturnTransferRestrictionCode +DA:36,10 +FN:36,RuleWhitelistShared.canReturnTransferRestrictionCode FNDA:10,RuleWhitelistShared.canReturnTransferRestrictionCode -DA:34,10 -DA:35,5 -DA:36,2 -DA:46,14 -FN:46,RuleWhitelistShared.messageForTransferRestriction +DA:37,10 +DA:38,5 +DA:39,2 +DA:49,14 +FN:49,RuleWhitelistShared.messageForTransferRestriction FNDA:14,RuleWhitelistShared.messageForTransferRestriction -DA:52,14 -BRDA:52,0,0,6 -BRDA:52,0,1,2 -DA:53,6 -DA:54,8 -BRDA:54,1,0,4 -BRDA:54,1,1,2 -DA:55,4 -DA:56,4 -BRDA:56,2,0,2 -BRDA:56,2,1,2 -DA:57,2 -DA:59,2 -DA:76,19 -FN:76,RuleWhitelistShared.transferred.0 +DA:55,14 +BRDA:55,0,0,6 +BRDA:55,0,1,2 +DA:56,6 +DA:57,8 +BRDA:57,1,0,4 +BRDA:57,1,1,2 +DA:58,4 +DA:59,4 +BRDA:59,2,0,2 +BRDA:59,2,1,2 +DA:60,2 +DA:62,2 +DA:81,19 +FN:81,RuleWhitelistShared.transferred.0 FNDA:19,RuleWhitelistShared.transferred.0 -DA:77,19 -DA:91,4 -FN:91,RuleWhitelistShared.transferred.1 +DA:82,19 +DA:96,4 +FN:96,RuleWhitelistShared.transferred.1 FNDA:4,RuleWhitelistShared.transferred.1 -DA:92,4 -DA:95,28 -FN:95,RuleWhitelistShared._transferred +DA:97,4 +DA:104,28 +FN:104,RuleWhitelistShared._transferred FNDA:28,RuleWhitelistShared._transferred -DA:96,28 -DA:97,28 -BRDA:97,3,0,14 -BRDA:97,3,1,14 -DA:103,11 -FN:103,RuleWhitelistShared._transferredFrom +DA:105,28 +DA:106,28 +BRDA:106,3,0,14 +BRDA:106,3,1,14 +DA:112,11 +FN:112,RuleWhitelistShared._transferredFrom FNDA:11,RuleWhitelistShared._transferredFrom -DA:104,11 -DA:105,11 -BRDA:105,4,0,4 -BRDA:105,4,1,7 +DA:113,11 +DA:114,11 +BRDA:114,4,0,4 +BRDA:114,4,1,7 FNF:6 FNH:6 LF:22 @@ -1317,29 +1405,29 @@ BRH:10 end_of_record TN: SF:src/rules/validation/deployment/RuleBlacklist.sol -DA:28,91 -FN:28,RuleBlacklist.supportsInterface +DA:32,91 +FN:32,RuleBlacklist.supportsInterface FNDA:91,RuleBlacklist.supportsInterface -DA:35,91 -DA:36,61 -DA:39,28 -FN:39,RuleBlacklist._authorizeAddressListAdd +DA:39,91 +DA:40,61 +DA:47,28 +FN:47,RuleBlacklist._authorizeAddressListAdd FNDA:28,RuleBlacklist._authorizeAddressListAdd -DA:41,1 -FN:41,RuleBlacklist._authorizeAddressListRemove +DA:49,1 +FN:49,RuleBlacklist._authorizeAddressListRemove FNDA:1,RuleBlacklist._authorizeAddressListRemove -DA:43,83 -FN:43,RuleBlacklist._msgSender +DA:55,83 +FN:55,RuleBlacklist._msgSender FNDA:83,RuleBlacklist._msgSender -DA:44,83 -DA:47,1 -FN:47,RuleBlacklist._msgData +DA:56,83 +DA:59,1 +FN:59,RuleBlacklist._msgData FNDA:1,RuleBlacklist._msgData -DA:48,1 -DA:51,84 -FN:51,RuleBlacklist._contextSuffixLength +DA:60,1 +DA:63,84 +FN:63,RuleBlacklist._contextSuffixLength FNDA:84,RuleBlacklist._contextSuffixLength -DA:52,84 +DA:64,84 FNF:6 FNH:6 LF:11 @@ -1349,24 +1437,24 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol -DA:17,2 -FN:17,RuleBlacklistOwnable2Step._authorizeAddressListAdd +DA:25,2 +FN:25,RuleBlacklistOwnable2Step._authorizeAddressListAdd FNDA:2,RuleBlacklistOwnable2Step._authorizeAddressListAdd -DA:19,2 -FN:19,RuleBlacklistOwnable2Step._authorizeAddressListRemove +DA:27,2 +FN:27,RuleBlacklistOwnable2Step._authorizeAddressListRemove FNDA:2,RuleBlacklistOwnable2Step._authorizeAddressListRemove -DA:21,12 -FN:21,RuleBlacklistOwnable2Step._msgSender +DA:33,12 +FN:33,RuleBlacklistOwnable2Step._msgSender FNDA:12,RuleBlacklistOwnable2Step._msgSender -DA:22,12 -DA:25,1 -FN:25,RuleBlacklistOwnable2Step._msgData +DA:34,12 +DA:37,1 +FN:37,RuleBlacklistOwnable2Step._msgData FNDA:1,RuleBlacklistOwnable2Step._msgData -DA:26,1 -DA:29,13 -FN:29,RuleBlacklistOwnable2Step._contextSuffixLength +DA:38,1 +DA:41,13 +FN:41,RuleBlacklistOwnable2Step._contextSuffixLength FNDA:13,RuleBlacklistOwnable2Step._contextSuffixLength -DA:30,13 +DA:42,13 FNF:5 FNH:5 LF:8 @@ -1376,34 +1464,34 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleERC2980.sol -DA:50,1 -FN:50,RuleERC2980.supportsInterface +DA:51,1 +FN:51,RuleERC2980.supportsInterface FNDA:1,RuleERC2980.supportsInterface -DA:57,1 -DA:64,42 -FN:64,RuleERC2980._authorizeWhitelistAdd -FNDA:42,RuleERC2980._authorizeWhitelistAdd -DA:66,8 -FN:66,RuleERC2980._authorizeWhitelistRemove +DA:58,1 +DA:65,44 +FN:65,RuleERC2980._authorizeWhitelistAdd +FNDA:44,RuleERC2980._authorizeWhitelistAdd +DA:67,8 +FN:67,RuleERC2980._authorizeWhitelistRemove FNDA:8,RuleERC2980._authorizeWhitelistRemove -DA:68,22 -FN:68,RuleERC2980._authorizeFrozenlistAdd +DA:69,22 +FN:69,RuleERC2980._authorizeFrozenlistAdd FNDA:22,RuleERC2980._authorizeFrozenlistAdd -DA:70,7 -FN:70,RuleERC2980._authorizeFrozenlistRemove +DA:71,7 +FN:71,RuleERC2980._authorizeFrozenlistRemove FNDA:7,RuleERC2980._authorizeFrozenlistRemove -DA:72,237 -FN:72,RuleERC2980._msgSender -FNDA:237,RuleERC2980._msgSender -DA:73,237 -DA:76,1 -FN:76,RuleERC2980._msgData +DA:77,242 +FN:77,RuleERC2980._msgSender +FNDA:242,RuleERC2980._msgSender +DA:78,242 +DA:81,1 +FN:81,RuleERC2980._msgData FNDA:1,RuleERC2980._msgData -DA:77,1 -DA:80,238 -FN:80,RuleERC2980._contextSuffixLength -FNDA:238,RuleERC2980._contextSuffixLength -DA:81,238 +DA:82,1 +DA:85,243 +FN:85,RuleERC2980._contextSuffixLength +FNDA:243,RuleERC2980._contextSuffixLength +DA:86,243 FNF:8 FNH:8 LF:12 @@ -1413,30 +1501,30 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleERC2980Ownable2Step.sol -DA:17,7 -FN:17,RuleERC2980Ownable2Step._authorizeWhitelistAdd +DA:33,7 +FN:33,RuleERC2980Ownable2Step._authorizeWhitelistAdd FNDA:7,RuleERC2980Ownable2Step._authorizeWhitelistAdd -DA:19,3 -FN:19,RuleERC2980Ownable2Step._authorizeWhitelistRemove +DA:35,3 +FN:35,RuleERC2980Ownable2Step._authorizeWhitelistRemove FNDA:3,RuleERC2980Ownable2Step._authorizeWhitelistRemove -DA:21,6 -FN:21,RuleERC2980Ownable2Step._authorizeFrozenlistAdd +DA:37,6 +FN:37,RuleERC2980Ownable2Step._authorizeFrozenlistAdd FNDA:6,RuleERC2980Ownable2Step._authorizeFrozenlistAdd -DA:23,2 -FN:23,RuleERC2980Ownable2Step._authorizeFrozenlistRemove +DA:39,2 +FN:39,RuleERC2980Ownable2Step._authorizeFrozenlistRemove FNDA:2,RuleERC2980Ownable2Step._authorizeFrozenlistRemove -DA:25,30 -FN:25,RuleERC2980Ownable2Step._msgSender +DA:45,30 +FN:45,RuleERC2980Ownable2Step._msgSender FNDA:30,RuleERC2980Ownable2Step._msgSender -DA:26,30 -DA:29,1 -FN:29,RuleERC2980Ownable2Step._msgData +DA:46,30 +DA:49,1 +FN:49,RuleERC2980Ownable2Step._msgData FNDA:1,RuleERC2980Ownable2Step._msgData -DA:30,1 -DA:33,31 -FN:33,RuleERC2980Ownable2Step._contextSuffixLength +DA:50,1 +DA:53,31 +FN:53,RuleERC2980Ownable2Step._contextSuffixLength FNDA:31,RuleERC2980Ownable2Step._contextSuffixLength -DA:34,31 +DA:54,31 FNF:7 FNH:7 LF:10 @@ -1446,13 +1534,13 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleIdentityRegistry.sol -DA:20,15 -FN:20,RuleIdentityRegistry.supportsInterface +DA:28,15 +FN:28,RuleIdentityRegistry.supportsInterface FNDA:15,RuleIdentityRegistry.supportsInterface -DA:27,15 -DA:28,10 -DA:35,5 -FN:35,RuleIdentityRegistry._authorizeIdentityRegistryManager +DA:35,15 +DA:36,10 +DA:43,5 +FN:43,RuleIdentityRegistry._authorizeIdentityRegistryManager FNDA:5,RuleIdentityRegistry._authorizeIdentityRegistryManager FNF:2 FNH:2 @@ -1463,8 +1551,8 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol -DA:15,4 -FN:15,RuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManager +DA:23,4 +FN:23,RuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManager FNDA:4,RuleIdentityRegistryOwnable2Step._authorizeIdentityRegistryManager FNF:1 FNH:1 @@ -1475,13 +1563,13 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleMaxTotalSupply.sol -DA:24,15 -FN:24,RuleMaxTotalSupply.supportsInterface +DA:32,15 +FN:32,RuleMaxTotalSupply.supportsInterface FNDA:15,RuleMaxTotalSupply.supportsInterface -DA:31,15 -DA:32,10 -DA:39,260 -FN:39,RuleMaxTotalSupply._authorizeMaxTotalSupplyManager +DA:39,15 +DA:40,10 +DA:47,260 +FN:47,RuleMaxTotalSupply._authorizeMaxTotalSupplyManager FNDA:260,RuleMaxTotalSupply._authorizeMaxTotalSupplyManager FNF:2 FNH:2 @@ -1492,8 +1580,8 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol -DA:18,4 -FN:18,RuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManager +DA:26,4 +FN:26,RuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManager FNDA:4,RuleMaxTotalSupplyOwnable2Step._authorizeMaxTotalSupplyManager FNF:1 FNH:1 @@ -1504,26 +1592,26 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleSanctionsList.sol -DA:26,58 -FN:26,RuleSanctionsList.supportsInterface +DA:34,58 +FN:34,RuleSanctionsList.supportsInterface FNDA:58,RuleSanctionsList.supportsInterface -DA:33,58 -DA:34,39 -DA:41,17 -FN:41,RuleSanctionsList._authorizeSanctionListManager +DA:41,58 +DA:42,39 +DA:49,17 +FN:49,RuleSanctionsList._authorizeSanctionListManager FNDA:17,RuleSanctionsList._authorizeSanctionListManager -DA:47,57 -FN:47,RuleSanctionsList._msgSender +DA:55,57 +FN:55,RuleSanctionsList._msgSender FNDA:57,RuleSanctionsList._msgSender -DA:48,57 -DA:51,1 -FN:51,RuleSanctionsList._msgData +DA:56,57 +DA:59,1 +FN:59,RuleSanctionsList._msgData FNDA:1,RuleSanctionsList._msgData -DA:52,1 -DA:55,58 -FN:55,RuleSanctionsList._contextSuffixLength +DA:60,1 +DA:63,58 +FN:63,RuleSanctionsList._contextSuffixLength FNDA:58,RuleSanctionsList._contextSuffixLength -DA:56,58 +DA:64,58 FNF:5 FNH:5 LF:10 @@ -1533,21 +1621,21 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol -DA:21,3 -FN:21,RuleSanctionsListOwnable2Step._authorizeSanctionListManager +DA:29,3 +FN:29,RuleSanctionsListOwnable2Step._authorizeSanctionListManager FNDA:3,RuleSanctionsListOwnable2Step._authorizeSanctionListManager -DA:23,11 -FN:23,RuleSanctionsListOwnable2Step._msgSender +DA:35,11 +FN:35,RuleSanctionsListOwnable2Step._msgSender FNDA:11,RuleSanctionsListOwnable2Step._msgSender -DA:24,11 -DA:27,1 -FN:27,RuleSanctionsListOwnable2Step._msgData +DA:36,11 +DA:39,1 +FN:39,RuleSanctionsListOwnable2Step._msgData FNDA:1,RuleSanctionsListOwnable2Step._msgData -DA:28,1 -DA:31,13 -FN:31,RuleSanctionsListOwnable2Step._contextSuffixLength +DA:40,1 +DA:43,13 +FN:43,RuleSanctionsListOwnable2Step._contextSuffixLength FNDA:13,RuleSanctionsListOwnable2Step._contextSuffixLength -DA:32,13 +DA:44,13 FNF:4 FNH:4 LF:7 @@ -1557,29 +1645,29 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleSpenderWhitelist.sol -DA:21,2 -FN:21,RuleSpenderWhitelist.supportsInterface -FNDA:2,RuleSpenderWhitelist.supportsInterface -DA:28,2 -DA:29,1 -DA:32,6 -FN:32,RuleSpenderWhitelist._authorizeAddressListAdd +DA:29,5 +FN:29,RuleSpenderWhitelist.supportsInterface +FNDA:5,RuleSpenderWhitelist.supportsInterface +DA:36,5 +DA:37,4 +DA:44,6 +FN:44,RuleSpenderWhitelist._authorizeAddressListAdd FNDA:6,RuleSpenderWhitelist._authorizeAddressListAdd -DA:34,2 -FN:34,RuleSpenderWhitelist._authorizeAddressListRemove +DA:46,2 +FN:46,RuleSpenderWhitelist._authorizeAddressListRemove FNDA:2,RuleSpenderWhitelist._authorizeAddressListRemove -DA:36,31 -FN:36,RuleSpenderWhitelist._msgSender +DA:52,31 +FN:52,RuleSpenderWhitelist._msgSender FNDA:31,RuleSpenderWhitelist._msgSender -DA:37,31 -DA:40,1 -FN:40,RuleSpenderWhitelist._msgData +DA:53,31 +DA:56,1 +FN:56,RuleSpenderWhitelist._msgData FNDA:1,RuleSpenderWhitelist._msgData -DA:41,1 -DA:44,33 -FN:44,RuleSpenderWhitelist._contextSuffixLength +DA:57,1 +DA:60,33 +FN:60,RuleSpenderWhitelist._contextSuffixLength FNDA:33,RuleSpenderWhitelist._contextSuffixLength -DA:45,33 +DA:61,33 FNF:6 FNH:6 LF:11 @@ -1589,24 +1677,24 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol -DA:20,2 -FN:20,RuleSpenderWhitelistOwnable2Step._authorizeAddressListAdd +DA:28,2 +FN:28,RuleSpenderWhitelistOwnable2Step._authorizeAddressListAdd FNDA:2,RuleSpenderWhitelistOwnable2Step._authorizeAddressListAdd -DA:22,2 -FN:22,RuleSpenderWhitelistOwnable2Step._authorizeAddressListRemove +DA:30,2 +FN:30,RuleSpenderWhitelistOwnable2Step._authorizeAddressListRemove FNDA:2,RuleSpenderWhitelistOwnable2Step._authorizeAddressListRemove -DA:24,10 -FN:24,RuleSpenderWhitelistOwnable2Step._msgSender +DA:36,10 +FN:36,RuleSpenderWhitelistOwnable2Step._msgSender FNDA:10,RuleSpenderWhitelistOwnable2Step._msgSender -DA:25,10 -DA:28,1 -FN:28,RuleSpenderWhitelistOwnable2Step._msgData +DA:37,10 +DA:40,1 +FN:40,RuleSpenderWhitelistOwnable2Step._msgData FNDA:1,RuleSpenderWhitelistOwnable2Step._msgData -DA:29,1 -DA:32,12 -FN:32,RuleSpenderWhitelistOwnable2Step._contextSuffixLength +DA:41,1 +DA:44,12 +FN:44,RuleSpenderWhitelistOwnable2Step._contextSuffixLength FNDA:12,RuleSpenderWhitelistOwnable2Step._contextSuffixLength -DA:33,12 +DA:45,12 FNF:5 FNH:5 LF:8 @@ -1616,32 +1704,32 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleWhitelist.sol -DA:43,40 -FN:43,RuleWhitelist.supportsInterface +DA:47,40 +FN:47,RuleWhitelist.supportsInterface FNDA:40,RuleWhitelist.supportsInterface -DA:50,40 -DA:51,27 -DA:58,1 -FN:58,RuleWhitelist._authorizeCheckSpenderManager +DA:54,40 +DA:55,27 +DA:62,1 +FN:62,RuleWhitelist._authorizeCheckSpenderManager FNDA:1,RuleWhitelist._authorizeCheckSpenderManager -DA:60,352 -FN:60,RuleWhitelist._authorizeAddressListAdd +DA:64,352 +FN:64,RuleWhitelist._authorizeAddressListAdd FNDA:352,RuleWhitelist._authorizeAddressListAdd -DA:62,263 -FN:62,RuleWhitelist._authorizeAddressListRemove +DA:66,263 +FN:66,RuleWhitelist._authorizeAddressListRemove FNDA:263,RuleWhitelist._authorizeAddressListRemove -DA:64,778 -FN:64,RuleWhitelist._msgSender -FNDA:778,RuleWhitelist._msgSender -DA:65,778 -DA:68,1 -FN:68,RuleWhitelist._msgData +DA:72,780 +FN:72,RuleWhitelist._msgSender +FNDA:780,RuleWhitelist._msgSender +DA:73,780 +DA:76,1 +FN:76,RuleWhitelist._msgData FNDA:1,RuleWhitelist._msgData -DA:69,1 -DA:72,779 -FN:72,RuleWhitelist._contextSuffixLength -FNDA:779,RuleWhitelist._contextSuffixLength -DA:73,779 +DA:77,1 +DA:80,781 +FN:80,RuleWhitelist._contextSuffixLength +FNDA:781,RuleWhitelist._contextSuffixLength +DA:81,781 FNF:7 FNH:7 LF:12 @@ -1651,27 +1739,27 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol -DA:20,2 -FN:20,RuleWhitelistOwnable2Step._authorizeAddressListAdd +DA:34,2 +FN:34,RuleWhitelistOwnable2Step._authorizeAddressListAdd FNDA:2,RuleWhitelistOwnable2Step._authorizeAddressListAdd -DA:22,2 -FN:22,RuleWhitelistOwnable2Step._authorizeAddressListRemove +DA:36,2 +FN:36,RuleWhitelistOwnable2Step._authorizeAddressListRemove FNDA:2,RuleWhitelistOwnable2Step._authorizeAddressListRemove -DA:24,2 -FN:24,RuleWhitelistOwnable2Step._authorizeCheckSpenderManager +DA:38,2 +FN:38,RuleWhitelistOwnable2Step._authorizeCheckSpenderManager FNDA:2,RuleWhitelistOwnable2Step._authorizeCheckSpenderManager -DA:26,15 -FN:26,RuleWhitelistOwnable2Step._msgSender +DA:44,15 +FN:44,RuleWhitelistOwnable2Step._msgSender FNDA:15,RuleWhitelistOwnable2Step._msgSender -DA:27,15 -DA:30,1 -FN:30,RuleWhitelistOwnable2Step._msgData +DA:45,15 +DA:48,1 +FN:48,RuleWhitelistOwnable2Step._msgData FNDA:1,RuleWhitelistOwnable2Step._msgData -DA:31,1 -DA:34,16 -FN:34,RuleWhitelistOwnable2Step._contextSuffixLength +DA:49,1 +DA:52,16 +FN:52,RuleWhitelistOwnable2Step._contextSuffixLength FNDA:16,RuleWhitelistOwnable2Step._contextSuffixLength -DA:35,16 +DA:53,16 FNF:6 FNH:6 LF:9 @@ -1681,41 +1769,41 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleWhitelistWrapper.sol -DA:34,38 -FN:34,RuleWhitelistWrapper.hasRole +DA:35,38 +FN:35,RuleWhitelistWrapper.hasRole FNDA:38,RuleWhitelistWrapper.hasRole -DA:41,134 -DA:44,2 -FN:44,RuleWhitelistWrapper._authorizeCheckSpenderManager +DA:42,134 +DA:45,46 +FN:45,RuleWhitelistWrapper.supportsInterface +FNDA:46,RuleWhitelistWrapper.supportsInterface +DA:52,46 +DA:53,31 +DA:60,2 +FN:60,RuleWhitelistWrapper._authorizeCheckSpenderManager FNDA:2,RuleWhitelistWrapper._authorizeCheckSpenderManager -DA:49,90 -FN:49,RuleWhitelistWrapper._onlyRulesManager +DA:65,90 +FN:65,RuleWhitelistWrapper._onlyRulesManager FNDA:90,RuleWhitelistWrapper._onlyRulesManager -DA:55,133 -FN:55,RuleWhitelistWrapper._msgSender +DA:71,133 +FN:71,RuleWhitelistWrapper._msgSender FNDA:133,RuleWhitelistWrapper._msgSender -DA:56,133 -DA:59,1 -FN:59,RuleWhitelistWrapper._msgData +DA:72,133 +DA:75,1 +FN:75,RuleWhitelistWrapper._msgData FNDA:1,RuleWhitelistWrapper._msgData -DA:60,1 -DA:63,134 -FN:63,RuleWhitelistWrapper._contextSuffixLength +DA:76,1 +DA:79,134 +FN:79,RuleWhitelistWrapper._contextSuffixLength FNDA:134,RuleWhitelistWrapper._contextSuffixLength -DA:70,134 -DA:73,46 -FN:73,RuleWhitelistWrapper.supportsInterface -FNDA:46,RuleWhitelistWrapper.supportsInterface -DA:80,46 -DA:81,16 -DA:84,38 -FN:84,RuleWhitelistWrapper._grantRole +DA:86,134 +DA:89,38 +FN:89,RuleWhitelistWrapper._grantRole FNDA:38,RuleWhitelistWrapper._grantRole -DA:90,38 -DA:93,1 -FN:93,RuleWhitelistWrapper._revokeRole +DA:95,38 +DA:98,1 +FN:98,RuleWhitelistWrapper._revokeRole FNDA:1,RuleWhitelistWrapper._revokeRole -DA:99,1 +DA:104,1 FNF:9 FNH:9 LF:17 @@ -1725,24 +1813,24 @@ BRH:0 end_of_record TN: SF:src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol -DA:28,2 -FN:28,RuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManager +DA:32,2 +FN:32,RuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManager FNDA:2,RuleWhitelistWrapperOwnable2Step._authorizeCheckSpenderManager -DA:33,2 -FN:33,RuleWhitelistWrapperOwnable2Step._onlyRulesManager +DA:37,2 +FN:37,RuleWhitelistWrapperOwnable2Step._onlyRulesManager FNDA:2,RuleWhitelistWrapperOwnable2Step._onlyRulesManager -DA:39,12 -FN:39,RuleWhitelistWrapperOwnable2Step._msgSender +DA:43,12 +FN:43,RuleWhitelistWrapperOwnable2Step._msgSender FNDA:12,RuleWhitelistWrapperOwnable2Step._msgSender -DA:40,12 -DA:43,1 -FN:43,RuleWhitelistWrapperOwnable2Step._msgData +DA:44,12 +DA:47,1 +FN:47,RuleWhitelistWrapperOwnable2Step._msgData FNDA:1,RuleWhitelistWrapperOwnable2Step._msgData -DA:44,1 -DA:47,13 -FN:47,RuleWhitelistWrapperOwnable2Step._contextSuffixLength +DA:48,1 +DA:51,13 +FN:51,RuleWhitelistWrapperOwnable2Step._contextSuffixLength FNDA:13,RuleWhitelistWrapperOwnable2Step._contextSuffixLength -DA:54,13 +DA:58,13 FNF:5 FNH:5 LF:8 diff --git a/doc/security/audits/tools/v0.2.0/ackee-wake-arena-v0.2.0-feedback.md b/doc/security/audits/tools/v0.2.0/ackee-wake-arena-v0.2.0-feedback.md new file mode 100644 index 0000000..00fdb8c --- /dev/null +++ b/doc/security/audits/tools/v0.2.0/ackee-wake-arena-v0.2.0-feedback.md @@ -0,0 +1,295 @@ +# Wake Arena (Ackee Blockchain Security) — Feedback + +**Report date:** 2026-03-16 +**Tool:** Wake Arena (AI-assisted static analysis) +**Audited commit:** `d72a98abbba29cd82a7056b59104e82ac65389e7` +**Report file:** [ackee-wake-arenav0.2.0.pdf](./ackee-wake-arenav0.2.0.pdf) +**Feedback date:** 2026-03-18 + +--- + +## Summary + +| ID | Title | Severity | Confidence | Verdict | +|----|-------|----------|------------|---------| +| H1 | ConditionalTransferLight approvals not scoped by token | High | High | **Fixed** | +| M1 | Incomplete `supportsInterface` breaks ERC-165 discovery | Medium | High | **Fixed** | +| I1 | RuleERC2980 docs omit frozen spender on `transferFrom` | Info | High | **Fixed (doc only)** | +| I2 | `hasRole` override: admin implicitly passes all role checks | Info | High | **Fixed (doc only)** | + +--- + +## H1 — ConditionalTransferLight approvals not scoped by token + +**Severity:** High | **Confidence:** High | **Verdict: Fixed** + +### Finding + +`approvalCounts` in `RuleConditionalTransferLightBase` was keyed exclusively by +`_transferHash(from, to, value)` — a keccak256 of the three packed arguments — with no +token address in the key. + +`_authorizeTransferExecution()` only verified that `msg.sender` was a bound token via +`isTokenBound(_msgSender())`, without verifying *which* token the approval was created +for. Because `ERC3643ComplianceModule` supported multiple simultaneous token bindings via +an `EnumerableSet.AddressSet`, a single rule instance could be bound to Token A and +Token B at the same time, allowing approvals recorded for one token to be consumed by the +other. + +Three concrete attack vectors were identified: + +1. **Cross-token replay** — an approval created by Token A's operator can be consumed by + a `transferred` call from Token B. +2. **Approval draining / DoS** — a malicious operator on Token B deliberately consumes + approvals meant for Token A, preventing legitimate transfers. +3. **Rebinding hazard** — stale approvals survive an unbind/rebind cycle and can be + consumed by a new token. + +### Assessment + +Valid and actionable. The exploit requires no elevated privilege beyond being an operator +of a second bound token. + +### Fix + +**Commit:** `2e41c72` + +Single-token binding is enforced by overriding `bindToken` in +`RuleConditionalTransferLightBase`: + +```solidity +function bindToken(address token) public override onlyComplianceManager { + require(getTokenBound() == address(0), RuleConditionalTransferLight_TokenAlreadyBound()); + _bindToken(token); +} +``` + +A second `bindToken` call now reverts with `RuleConditionalTransferLight_TokenAlreadyBound`. +To migrate to a new token the compliance manager must first call `unbindToken`. + +This eliminates vectors 1 and 2 entirely. Vector 3 (stale approvals after an explicit +unbind/rebind) remains a conscious operator decision — the operator who controls rebinding +also controls approvals — and is documented in NatSpec on `bindToken`. + +The error `RuleConditionalTransferLight_TokenAlreadyBound` was added to +`RuleConditionalTransferLightInvariantStorage`. Tests added: +`testBindToken_RevertsIfAlreadyBound` and `testBindToken_RevertsForUnauthorizedCaller`. + +As a follow-up refactor (commit `7e3abb2`) the base contract was split into +`RuleConditionalTransferLightApprovalBase` (pure approval state machine) and +`RuleConditionalTransferLightBase` (ERC-3643 / IRule compliance integration). The +`bindToken` guard and `_authorizeTransferExecution` were consolidated into the base to +eliminate duplication between the AccessControl and Ownable2Step variants. +`RuleConditionalTransferLightOwnable2Step` was also updated to inherit +`ERC3643ComplianceModule` for consistency. + +--- + +## M1 — Incomplete `supportsInterface` breaks ERC-165 discovery + +**Severity:** Medium | **Confidence:** High | **Verdict: Fixed** + +### Finding + +`RuleTransferValidation.supportsInterface` only declared `type(IRule).interfaceId` and +`RuleInterfaceId.IRULE_INTERFACE_ID`, omitting `IERC165`, `IERC1404`, `IERC1404Extend`, +`IERC3643ComplianceRead`, and `IERC7551Compliance`. + +`RuleConditionalTransferLight.supportsInterface` delegated to +`AccessControlEnumerable.supportsInterface` (covering `IERC165`, `IAccessControl`, +`IAccessControlEnumerable`) but omitted `IERC1404`, `IERC1404Extend`, +`IERC3643ComplianceRead`, `IERC7551Compliance`, and `IERC3643IComplianceContract`. + +Silent `false` responses from `supportsInterface` cause integration failures or silent +enforcement bypasses in tools and front-ends that use ERC-165 introspection to verify +rule capabilities before wiring them. + +### Assessment + +Valid. The gap is directly observable from source. `type(IFoo).interfaceId` in Solidity +only XORs selectors defined directly on `IFoo` and does **not** include selectors from +inherited interfaces — a subtle but critical point for hierarchical compliance interfaces. + +### Fix + +**Commit:** `5500a74` (initial fix) — follow-up additions below. + +Pre-computed library constants from CMTAT are used in place of raw `type(X).interfaceId` +calls: + +- `ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID` (`0x78a8de7d`) — covers the full + ERC-1404 / ERC-1404-Extend compliance interface family +- `RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID` (`0x20c49ce7`) — covers `IRuleEngine` +- `RuleInterfaceId.IRULE_INTERFACE_ID` (`0x2497d6cb`) — covers `IRule` + +Two further interfaces were added as follow-up: + +- `type(IERC7551Compliance).interfaceId` (`0x7157797f`) — single selector + `canTransferFrom(address,address,address,uint256)`; safe to use `type(X).interfaceId` + directly because `IERC7551Compliance` defines exactly one function. +- For **validation rules** (`RuleTransferValidation` and all subclasses): + `type(IERC3643IComplianceContract).interfaceId` — single selector + `transferred(address,address,uint256)`; also safe to use directly. +- For **`RuleConditionalTransferLight`** and **`RuleConditionalTransferLightOwnable2Step`**: + instead of the narrow `IERC3643IComplianceContract`, the full ERC-3643 `ICompliance` + interface ID is advertised via the flat mock `IERC3643ComplianceFull` + (`src/mocks/IERC3643ComplianceFull.sol`, `0x3144991c`). These contracts implement all + eight `ICompliance` functions (`bindToken`, `unbindToken`, `isTokenBound`, + `getTokenBound`, `canTransfer`, `transferred`, `created`, `destroyed`). Using + `type(IERC3643Compliance).interfaceId` directly would be wrong because it only XORs + the seven selectors defined directly on `IERC3643Compliance`, missing `canTransfer` + and `transferred` which come from parent interfaces. The flat mock redeclares all eight + so the XOR is correct. + +Final state of each `supportsInterface`: + +**`RuleTransferValidation`** (cascades to all validation rules): + +```solidity +function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { + return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643IComplianceContract).interfaceId; +} +``` + +**`RuleConditionalTransferLight`**: + +```solidity +function supportsInterface(bytes4 interfaceId) + public view virtual override(AccessControlEnumerable, IERC165) returns (bool) +{ + return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643ComplianceFull).interfaceId + || AccessControlEnumerable.supportsInterface(interfaceId); +} +``` + +**`RuleConditionalTransferLightOwnable2Step`**: + +```solidity +function supportsInterface(bytes4 interfaceId) public view override returns (bool) { + return interfaceId == type(IERC165).interfaceId + || interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643ComplianceFull).interfaceId; +} +``` + +The convention is now documented in `CLAUDE.md` and `AGENTS.md`: +> `type(IFoo).interfaceId` only XORs selectors defined directly on `IFoo`. Always use +> pre-computed library constants. If no constant exists, define a flat mock interface +> that redeclares the full inheritance tree and use `type(IFooFlattened).interfaceId`. + +--- + +## I1 — RuleERC2980 docs omit frozen spender on `transferFrom` + +**Severity:** Info | **Confidence:** High | **Verdict: Fixed (doc only)** + +### Finding + +`RuleERC2980Base._detectTransferRestrictionFrom` correctly returns +`CODE_ADDRESS_SPENDER_IS_FROZEN` (code 62) when `_isFrozen(spender)` is true. However, +the README, `AGENTS.md`, and `CLAUDE.md` described the frozenlist as blocking only +`from` and `to`: + +> "frozen addresses are completely blocked — they can neither send nor receive tokens" + +The spender path for `transferFrom` was never mentioned, causing integrators to not +anticipate that freezing an exchange or escrow address also blocks its `transferFrom` +delegation. + +### Assessment + +Valid — code is correct, documentation is incomplete. No security vulnerability: the +behaviour is more restrictive (safer) than documented, so no funds can be stolen, only +unexpected reverts. + +### Fix + +**Commit:** `8926e0a` + +Documentation updated in `README.md`, `AGENTS.md`, and `CLAUDE.md`: + +> "Frozen addresses are completely blocked — they can neither send nor receive tokens. +> Additionally, a frozen address acting as a `transferFrom` spender will have the +> transfer rejected (code 62), even if `from` and `to` are not frozen." + +The `RuleERC2980` summary table row was updated to: + +> "ERC-2980 Swiss Compliant rule: whitelist (recipient-only) + frozenlist (blocks +> sender, recipient, **and spender for `transferFrom`**); frozenlist takes priority." + +--- + +## I2 — `hasRole` override: admin implicitly passes all role checks + +**Severity:** Info | **Confidence:** High | **Verdict: Fixed (doc only)** + +### Finding + +`AccessControlModuleStandalone.hasRole` overrides the OpenZeppelin implementation so that +any account holding `DEFAULT_ADMIN_ROLE` returns `true` for every role check: + +```solidity +if (AccessControl.hasRole(DEFAULT_ADMIN_ROLE, account)) { + return true; +} +``` + +This diverges from standard OpenZeppelin semantics where `DEFAULT_ADMIN_ROLE` only +controls who can grant/revoke other roles. Consequences noted by the auditor: + +- `grantRole` to a default admin is a no-op — `_grantRole` skips storage and no + `RoleGranted` event is emitted; the admin is absent from enumeration. +- `revokeRole` / `renounceRole` emit `RoleRevoked` and clear storage, but `hasRole` + continues to return `true`. Effective access is unchanged. +- Off-chain monitoring relying on events or enumerable queries will incorrectly believe + the admin lost a role. + +### Assessment + +**Intentional by design — no code change.** The OpenZeppelin `DEFAULT_ADMIN_ROLE` holder +can already grant itself any role at any time. Treating it as implicitly holding all roles +removes unnecessary ceremony and simplifies access management for regulated token issuers. +The misleading event and enumeration behaviour is acknowledged and documented. + +### Fix + +**Commit:** `769ec2d` + +A dedicated sub-section added to `README.md` under *Access Control* documenting: + +- The intentional `hasRole` override and its rationale. +- `grantRole` no-op behaviour and enumeration absence for admin accounts. +- `revokeRole` / `renounceRole` misleading semantics; `DEFAULT_ADMIN_ROLE` itself must be + revoked to fully remove access. +- Recommendation for off-chain tooling to use `hasRole` queries rather than role events + or enumeration. + +**Possible future improvement:** introduce a `hasPermission` helper alongside a dedicated +`onlyRoleOrAdmin` modifier, keeping `hasRole` standard (no override) while preserving the +admin bypass only where explicitly needed: + +```solidity +function hasPermission(bytes32 role, address account) public view returns (bool) { + return AccessControl.hasRole(DEFAULT_ADMIN_ROLE, account) + || AccessControl.hasRole(role, account); +} + +modifier onlyRoleOrAdmin(bytes32 role) { + require(hasPermission(role, _msgSender()), ...); + _; +} +``` + +This would restore event and enumeration consistency without changing the effective access +model. diff --git a/doc/security/audits/tools/v0.2.0/ackee-wake-arenav0.2.0.pdf b/doc/security/audits/tools/v0.2.0/ackee-wake-arenav0.2.0.pdf new file mode 100644 index 0000000..e121299 Binary files /dev/null and b/doc/security/audits/tools/v0.2.0/ackee-wake-arenav0.2.0.pdf differ diff --git a/doc/security/audits/tools/v0.2.0/aderyn-report-feedback.md b/doc/security/audits/tools/v0.2.0/aderyn-report-feedback.md index 7d7d7ae..49a1f02 100644 --- a/doc/security/audits/tools/v0.2.0/aderyn-report-feedback.md +++ b/doc/security/audits/tools/v0.2.0/aderyn-report-feedback.md @@ -26,7 +26,7 @@ This library implements compliance rules for regulated security tokens (CMTAT / ## L-2: Unsafe ERC20 Operation -**Verdict: Acknowledged — low impact** +**Verdict: Fixed (patched in v0.3.0)** Flagged location: `RuleConditionalTransferLightBase.sol` line 59: @@ -35,7 +35,8 @@ bool success = IERC20(token).transferFrom(from, to, value); require(success, RuleConditionalTransferLight_TransferFailed()); ``` -The return value **is** explicitly checked with `require`. Aderyn flags any direct `.transferFrom` call that does not use `SafeERC20`, but the concern for `SafeERC20` is tokens that return no value (e.g. USDT on mainnet). The token bound to this rule is expected to be a CMTAT-compatible token, which correctly returns a `bool`. The check is already present, so the risk is negligible. `SafeERC20` could be adopted for defence-in-depth; recorded as a potential future hardening item. +Originally, the return value was explicitly checked with `require`, and the residual risk was considered low for CMTAT-compatible tokens. +This finding has now been patched in `v0.3.0`: `RuleConditionalTransferLightBase.approveAndTransferIfAllowed` uses OpenZeppelin `SafeERC20.safeTransferFrom`, which safely handles non-standard ERC-20 return behavior. --- @@ -116,7 +117,7 @@ All flagged loops perform `EnumerableSet.add` / `EnumerableSet.remove` calls, ea | ID | Title | Verdict | |---|---|---| | L-1 | Centralization Risk | Acknowledged — by design | -| L-2 | Unsafe ERC20 Operation | Acknowledged — low impact | +| L-2 | Unsafe ERC20 Operation | Fixed (patched in v0.3.0) | | L-3 | Unspecific Solidity Pragma | Acknowledged — by design | | L-4 | Address State Variable Set Without Checks | False positive | | L-5 | PUSH0 Opcode | Acknowledged — not applicable | diff --git a/doc/security/audits/tools/v0.3.0/aderyn-report-feedback.md b/doc/security/audits/tools/v0.3.0/aderyn-report-feedback.md new file mode 100644 index 0000000..5b59433 --- /dev/null +++ b/doc/security/audits/tools/v0.3.0/aderyn-report-feedback.md @@ -0,0 +1,104 @@ +# Aderyn Report — Feedback + +Report version: `v0.3.0` +Aderyn report: [aderyn-report.md](./aderyn-report.md) +Feedback date: 2026-04-16 + +This document provides the project team's assessment of each finding reported by the Aderyn static analyser. For each issue the verdict is one of: + +| Verdict | Meaning | +|---|---| +| **Acknowledged** | Known, accepted by design; no change planned. | +| **Acknowledged — low impact** | Technically valid but the actual risk is negligible given context. | +| **Fixed** | Resolved in the codebase. | +| **To fix** | Will be addressed in a future revision. | +| **False positive** | Tool mis-identification; no real issue exists. | + +--- + +## L-1: Centralization Risk + +**Verdict: Acknowledged — by design** + +This library implements compliance rules for regulated security tokens (CMTAT / ERC-3643). Admin and operator roles are intentionally held by the issuer/compliance operator. This is an explicit trust assumption, not an implementation bug. + +--- + +## L-2: Unspecific Solidity Pragma + +**Verdict: Acknowledged — by design** + +The repository intentionally uses `pragma solidity ^0.8.20` to keep the library integrator-friendly while the project itself remains deterministic via `foundry.toml` (`solc = 0.8.34`). + +--- + +## L-3: Address State Variable Set Without Checks + +**Verdict: False positive** + +Flagged location: assignment in `RuleSanctionsListBase._setSanctionListOracle`. + +The zero-address guard is enforced at the public boundary in `setSanctionListOracle(...)`. The internal setter accepts `address(0)` intentionally because `clearSanctionListOracle()` must disable the oracle. + +--- + +## L-4: PUSH0 Opcode + +**Verdict: Acknowledged — not applicable** + +The project targets `evm_version = "prague"` in `foundry.toml`, and deployment targets are expected to support Shanghai+ opcodes including `PUSH0`. + +--- + +## L-5: Modifier Invoked Only Once + +**Verdict: Acknowledged — by design (template method pattern)** + +Flagged modifiers (e.g., `onlyCheckSpenderManager`) are deliberate authorization wrappers over abstract `_authorize*` hooks. Inlining would weaken consistency across AccessControl and Ownable variants. + +--- + +## L-6: Empty Block + +**Verdict: Acknowledged — by design (template method pattern / interface compliance)** + +Most empty blocks are `_authorize*` hook implementations where the check is provided by modifiers (`onlyRole`, `onlyOwner`). + +Other empty functions are intentional no-ops required by shared interfaces in rules that are read-only for specific paths. + +--- + +## L-7: Costly operations inside loop + +**Verdict: Acknowledged — unavoidable** + +Flagged loops perform `EnumerableSet` insert/remove operations across batch APIs. These operations are inherently storage writes (`SSTORE`) per item, so linear gas growth is expected and unavoidable. + +--- + +## L-8: Unchecked Return + +**Verdict: Mixed — see per-instance analysis below** + +| Instance | Assessment | +|---|---| +| `_grantRole(DEFAULT_ADMIN_ROLE, admin)` in `AccessControlModuleStandalone` | **Acknowledged / low impact** — constructor path; duplicate grant would simply return `false` and is not expected on fresh deployment. | +| `_addAddresses(...)` / `_removeAddresses(...)` batch helpers | **False positive** — `void` helpers, no return value to check. | +| `_listedAddresses.add/remove` in `RuleAddressSetInternal` single-item helpers | **False positive** — correctness guaranteed by outer pre-checks in public single-item methods. | +| `_whitelist.add/remove` and `_frozenlist.add/remove` in `RuleERC2980Internal` single-item helpers | **False positive** — same pre-check pattern as above. | +| `_addWhitelistAddresses` / `_removeWhitelistAddresses` / `_addFrozenlistAddresses` / `_removeFrozenlistAddresses` | **False positive** — batch helper path, no unchecked boolean return at API boundary. | + +--- + +## Summary + +| ID | Title | Verdict | +|---|---|---| +| L-1 | Centralization Risk | Acknowledged — by design | +| L-2 | Unspecific Solidity Pragma | Acknowledged — by design | +| L-3 | Address State Variable Set Without Checks | False positive | +| L-4 | PUSH0 Opcode | Acknowledged — not applicable | +| L-5 | Modifier Invoked Only Once | Acknowledged — by design | +| L-6 | Empty Block | Acknowledged — by design | +| L-7 | Costly operations inside loop | Acknowledged — unavoidable | +| L-8 | Unchecked Return | Mixed (majority false positives) | diff --git a/doc/security/audits/tools/v0.3.0/aderyn-report.md b/doc/security/audits/tools/v0.3.0/aderyn-report.md new file mode 100644 index 0000000..8f3b887 --- /dev/null +++ b/doc/security/audits/tools/v0.3.0/aderyn-report.md @@ -0,0 +1,1473 @@ +# Aderyn Analysis Report + +This report was generated by [Aderyn](https://github.com/Cyfrin/aderyn), a static analysis tool built by [Cyfrin](https://cyfrin.io), a blockchain security company. This report is not a substitute for manual audit or security review. It should not be relied upon for any purpose other than to assist in the identification of potential security vulnerabilities. +# Table of Contents + +- [Summary](#summary) + - [Files Summary](#files-summary) + - [Files Details](#files-details) + - [Issue Summary](#issue-summary) +- [Low Issues](#low-issues) + - [L-1: Centralization Risk](#l-1-centralization-risk) + - [L-2: Unspecific Solidity Pragma](#l-2-unspecific-solidity-pragma) + - [L-3: Address State Variable Set Without Checks](#l-3-address-state-variable-set-without-checks) + - [L-4: PUSH0 Opcode](#l-4-push0-opcode) + - [L-5: Modifier Invoked Only Once](#l-5-modifier-invoked-only-once) + - [L-6: Empty Block](#l-6-empty-block) + - [L-7: Costly operations inside loop](#l-7-costly-operations-inside-loop) + - [L-8: Unchecked Return](#l-8-unchecked-return) + + +# Summary + +## Files Summary + +| Key | Value | +| --- | --- | +| .sol Files | 54 | +| Total nSLOC | 2235 | + + +## Files Details + +| Filepath | nSLOC | +| --- | --- | +| src/modules/AccessControlModuleStandalone.sol | 24 | +| src/modules/MetaTxModuleStandalone.sol | 6 | +| src/modules/VersionModule.sol | 8 | +| src/rules/interfaces/IAddressList.sol | 15 | +| src/rules/interfaces/IERC2980.sol | 5 | +| src/rules/interfaces/IERC7943NonFungibleCompliance.sol | 19 | +| src/rules/interfaces/IIdentityRegistry.sol | 7 | +| src/rules/interfaces/ISanctionsList.sol | 4 | +| src/rules/interfaces/ITotalSupply.sol | 4 | +| src/rules/interfaces/ITransferContext.sol | 22 | +| src/rules/operation/RuleConditionalTransferLight.sol | 29 | +| src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol | 23 | +| src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol | 57 | +| src/rules/operation/abstract/RuleConditionalTransferLightBase.sol | 123 | +| src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol | 18 | +| src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol | 66 | +| src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol | 39 | +| src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol | 7 | +| src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol | 14 | +| src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol | 15 | +| src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol | 79 | +| src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol | 30 | +| src/rules/validation/abstract/base/RuleBlacklistBase.sol | 100 | +| src/rules/validation/abstract/base/RuleERC2980Base.sol | 220 | +| src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol | 109 | +| src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol | 90 | +| src/rules/validation/abstract/base/RuleSanctionsListBase.sol | 108 | +| src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol | 52 | +| src/rules/validation/abstract/base/RuleWhitelistBase.sol | 70 | +| src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol | 145 | +| src/rules/validation/abstract/core/RuleNFTAdapter.sol | 111 | +| src/rules/validation/abstract/core/RuleTransferValidation.sol | 70 | +| src/rules/validation/abstract/core/RuleWhitelistShared.sol | 49 | +| src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol | 16 | +| src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol | 13 | +| src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol | 18 | +| src/rules/validation/abstract/invariant/RuleSharedInvariantStorage.sol | 4 | +| src/rules/validation/abstract/invariant/RuleSpenderWhitelistInvariantStorage.sol | 9 | +| src/rules/validation/deployment/RuleBlacklist.sol | 33 | +| src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol | 20 | +| src/rules/validation/deployment/RuleERC2980.sol | 33 | +| src/rules/validation/deployment/RuleERC2980Ownable2Step.sol | 24 | +| src/rules/validation/deployment/RuleIdentityRegistry.sol | 22 | +| src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol | 8 | +| src/rules/validation/deployment/RuleMaxTotalSupply.sol | 22 | +| src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol | 11 | +| src/rules/validation/deployment/RuleSanctionsList.sol | 34 | +| src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol | 23 | +| src/rules/validation/deployment/RuleSpenderWhitelist.sol | 34 | +| src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol | 23 | +| src/rules/validation/deployment/RuleWhitelist.sol | 35 | +| src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol | 24 | +| src/rules/validation/deployment/RuleWhitelistWrapper.sol | 63 | +| src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol | 28 | +| **Total** | **2235** | + + +## Issue Summary + +| Category | No. of Issues | +| --- | --- | +| High | 0 | +| Low | 8 | + + +# Low Issues + +## L-1: Centralization Risk + +Contracts have owners with privileged rights to perform admin tasks and need to be trusted to not perform malicious updates or drain funds. + +
46 Found Instances + + +- Found in src/modules/AccessControlModuleStandalone.sol [Line: 10](src/modules/AccessControlModuleStandalone.sol#L10) + + ```solidity + abstract contract AccessControlModuleStandalone is AccessControlEnumerable { + ``` + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 52](src/rules/operation/RuleConditionalTransferLight.sol#L52) + + ```solidity + function _authorizeTransferApproval() internal view virtual override onlyRole(OPERATOR_ROLE) {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 54](src/rules/operation/RuleConditionalTransferLight.sol#L54) + + ```solidity + function _onlyComplianceManager() internal virtual override onlyRole(COMPLIANCE_MANAGER_ROLE) {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 18](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L18) + + ```solidity + contract RuleConditionalTransferLightOwnable2Step is RuleConditionalTransferLightBase, Ownable2Step { + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 42](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L42) + + ```solidity + function _authorizeTransferApproval() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 44](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L44) + + ```solidity + function _onlyComplianceManager() internal virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 47](src/rules/validation/deployment/RuleBlacklist.sol#L47) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 49](src/rules/validation/deployment/RuleBlacklist.sol#L49) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 14](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L14) + + ```solidity + contract RuleBlacklistOwnable2Step is RuleBlacklistBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 25](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L25) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 27](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L27) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 65](src/rules/validation/deployment/RuleERC2980.sol#L65) + + ```solidity + function _authorizeWhitelistAdd() internal view virtual override onlyRole(WHITELIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 67](src/rules/validation/deployment/RuleERC2980.sol#L67) + + ```solidity + function _authorizeWhitelistRemove() internal view virtual override onlyRole(WHITELIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 69](src/rules/validation/deployment/RuleERC2980.sol#L69) + + ```solidity + function _authorizeFrozenlistAdd() internal view virtual override onlyRole(FROZENLIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 71](src/rules/validation/deployment/RuleERC2980.sol#L71) + + ```solidity + function _authorizeFrozenlistRemove() internal view virtual override onlyRole(FROZENLIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 14](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L14) + + ```solidity + contract RuleERC2980Ownable2Step is RuleERC2980Base, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 33](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L33) + + ```solidity + function _authorizeWhitelistAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 35](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L35) + + ```solidity + function _authorizeWhitelistRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 37](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L37) + + ```solidity + function _authorizeFrozenlistAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 39](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L39) + + ```solidity + function _authorizeFrozenlistRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistry.sol [Line: 43](src/rules/validation/deployment/RuleIdentityRegistry.sol#L43) + + ```solidity + function _authorizeIdentityRegistryManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol [Line: 12](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L12) + + ```solidity + contract RuleIdentityRegistryOwnable2Step is RuleIdentityRegistryBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol [Line: 23](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L23) + + ```solidity + function _authorizeIdentityRegistryManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupply.sol [Line: 47](src/rules/validation/deployment/RuleMaxTotalSupply.sol#L47) + + ```solidity + function _authorizeMaxTotalSupplyManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol [Line: 12](src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol#L12) + + ```solidity + contract RuleMaxTotalSupplyOwnable2Step is RuleMaxTotalSupplyBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol [Line: 26](src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol#L26) + + ```solidity + function _authorizeMaxTotalSupplyManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsList.sol [Line: 49](src/rules/validation/deployment/RuleSanctionsList.sol#L49) + + ```solidity + function _authorizeSanctionListManager() internal view virtual override onlyRole(SANCTIONLIST_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol [Line: 15](src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol#L15) + + ```solidity + contract RuleSanctionsListOwnable2Step is RuleSanctionsListBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol [Line: 29](src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol#L29) + + ```solidity + function _authorizeSanctionListManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 44](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L44) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 46](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L46) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 14](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L14) + + ```solidity + contract RuleSpenderWhitelistOwnable2Step is RuleSpenderWhitelistBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 28](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L28) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 30](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L30) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 62](src/rules/validation/deployment/RuleWhitelist.sol#L62) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 64](src/rules/validation/deployment/RuleWhitelist.sol#L64) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 66](src/rules/validation/deployment/RuleWhitelist.sol#L66) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 14](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L14) + + ```solidity + contract RuleWhitelistOwnable2Step is RuleWhitelistBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 34](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L34) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 36](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L36) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 38](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L38) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 60](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L60) + + ```solidity + function _authorizeCheckSpenderManager() internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 65](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L65) + + ```solidity + function _onlyRulesManager() internal virtual override onlyRole(RULES_MANAGEMENT_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 15](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L15) + + ```solidity + contract RuleWhitelistWrapperOwnable2Step is RuleWhitelistWrapperBase, Ownable2Step { + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 32](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L32) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 37](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L37) + + ```solidity + function _onlyRulesManager() internal view virtual override onlyOwner {} + ``` + +
+ + + +## L-2: Unspecific Solidity Pragma + +Consider using a specific version of Solidity in your contracts instead of a wide version. For example, instead of `pragma solidity ^0.8.0;`, use `pragma solidity 0.8.0;` + +
54 Found Instances + + +- Found in src/modules/AccessControlModuleStandalone.sol [Line: 3](src/modules/AccessControlModuleStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/modules/MetaTxModuleStandalone.sol [Line: 3](src/modules/MetaTxModuleStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/modules/VersionModule.sol [Line: 2](src/modules/VersionModule.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IAddressList.sol [Line: 2](src/rules/interfaces/IAddressList.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IERC2980.sol [Line: 2](src/rules/interfaces/IERC2980.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IERC7943NonFungibleCompliance.sol [Line: 3](src/rules/interfaces/IERC7943NonFungibleCompliance.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IIdentityRegistry.sol [Line: 3](src/rules/interfaces/IIdentityRegistry.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ISanctionsList.sol [Line: 3](src/rules/interfaces/ISanctionsList.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ITotalSupply.sol [Line: 2](src/rules/interfaces/ITotalSupply.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ITransferContext.sol [Line: 2](src/rules/interfaces/ITransferContext.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 2](src/rules/operation/RuleConditionalTransferLight.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 2](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightBase.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol [Line: 2](src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 2](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 2](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol [Line: 2](src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleBlacklistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleBlacklistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 2](src/rules/validation/abstract/base/RuleERC2980Base.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol [Line: 2](src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol [Line: 2](src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleSanctionsListBase.sol [Line: 2](src/rules/validation/abstract/base/RuleSanctionsListBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleWhitelistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleWhitelistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol [Line: 3](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleNFTAdapter.sol [Line: 2](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleTransferValidation.sol [Line: 3](src/rules/validation/abstract/core/RuleTransferValidation.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleWhitelistShared.sol [Line: 2](src/rules/validation/abstract/core/RuleWhitelistShared.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol [Line: 3](src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSharedInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleSharedInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSpenderWhitelistInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleSpenderWhitelistInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 3](src/rules/validation/deployment/RuleBlacklist.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 2](src/rules/validation/deployment/RuleERC2980.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 2](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistry.sol [Line: 2](src/rules/validation/deployment/RuleIdentityRegistry.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupply.sol [Line: 2](src/rules/validation/deployment/RuleMaxTotalSupply.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsList.sol [Line: 2](src/rules/validation/deployment/RuleSanctionsList.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 2](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 2](src/rules/validation/deployment/RuleWhitelist.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 3](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 3](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +
+ + + +## L-3: Address State Variable Set Without Checks + +Check for `address(0)` when assigning values to address state variables. + +
1 Found Instances + + +- Found in src/rules/validation/abstract/base/RuleSanctionsListBase.sol [Line: 146](src/rules/validation/abstract/base/RuleSanctionsListBase.sol#L146) + + ```solidity + sanctionsList = sanctionContractOracle_; + ``` + +
+ + + +## L-4: PUSH0 Opcode + +Solc compiler version 0.8.20 switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0 opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not support PUSH0, otherwise deployment of your contracts will fail. + +
54 Found Instances + + +- Found in src/modules/AccessControlModuleStandalone.sol [Line: 3](src/modules/AccessControlModuleStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/modules/MetaTxModuleStandalone.sol [Line: 3](src/modules/MetaTxModuleStandalone.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/modules/VersionModule.sol [Line: 2](src/modules/VersionModule.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IAddressList.sol [Line: 2](src/rules/interfaces/IAddressList.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IERC2980.sol [Line: 2](src/rules/interfaces/IERC2980.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IERC7943NonFungibleCompliance.sol [Line: 3](src/rules/interfaces/IERC7943NonFungibleCompliance.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/IIdentityRegistry.sol [Line: 3](src/rules/interfaces/IIdentityRegistry.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ISanctionsList.sol [Line: 3](src/rules/interfaces/ISanctionsList.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ITotalSupply.sol [Line: 2](src/rules/interfaces/ITotalSupply.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/interfaces/ITransferContext.sol [Line: 2](src/rules/interfaces/ITransferContext.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 2](src/rules/operation/RuleConditionalTransferLight.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 2](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightBase.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol [Line: 2](src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol [Line: 2](src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 2](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol [Line: 3](src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 2](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol [Line: 2](src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleBlacklistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleBlacklistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 2](src/rules/validation/abstract/base/RuleERC2980Base.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol [Line: 2](src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol [Line: 2](src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleSanctionsListBase.sol [Line: 2](src/rules/validation/abstract/base/RuleSanctionsListBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleWhitelistBase.sol [Line: 2](src/rules/validation/abstract/base/RuleWhitelistBase.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol [Line: 3](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleNFTAdapter.sol [Line: 2](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleTransferValidation.sol [Line: 3](src/rules/validation/abstract/core/RuleTransferValidation.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/core/RuleWhitelistShared.sol [Line: 2](src/rules/validation/abstract/core/RuleWhitelistShared.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol [Line: 3](src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSharedInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleSharedInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/abstract/invariant/RuleSpenderWhitelistInvariantStorage.sol [Line: 2](src/rules/validation/abstract/invariant/RuleSpenderWhitelistInvariantStorage.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 3](src/rules/validation/deployment/RuleBlacklist.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 2](src/rules/validation/deployment/RuleERC2980.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 2](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistry.sol [Line: 2](src/rules/validation/deployment/RuleIdentityRegistry.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupply.sol [Line: 2](src/rules/validation/deployment/RuleMaxTotalSupply.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsList.sol [Line: 2](src/rules/validation/deployment/RuleSanctionsList.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 2](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 2](src/rules/validation/deployment/RuleWhitelist.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 2](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L2) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 3](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 3](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L3) + + ```solidity + pragma solidity ^0.8.20; + ``` + +
+ + + +## L-5: Modifier Invoked Only Once + +Consider removing the modifier or inlining the logic into the calling function. + +
2 Found Instances + + +- Found in src/rules/validation/abstract/base/RuleWhitelistBase.sol [Line: 55](src/rules/validation/abstract/base/RuleWhitelistBase.sol#L55) + + ```solidity + modifier onlyCheckSpenderManager() { + ``` + +- Found in src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol [Line: 39](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L39) + + ```solidity + modifier onlyCheckSpenderManager() { + ``` + +
+ + + +## L-6: Empty Block + +Consider removing empty blocks. + +
38 Found Instances + + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 52](src/rules/operation/RuleConditionalTransferLight.sol#L52) + + ```solidity + function _authorizeTransferApproval() internal view virtual override onlyRole(OPERATOR_ROLE) {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLight.sol [Line: 54](src/rules/operation/RuleConditionalTransferLight.sol#L54) + + ```solidity + function _onlyComplianceManager() internal virtual override onlyRole(COMPLIANCE_MANAGER_ROLE) {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 42](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L42) + + ```solidity + function _authorizeTransferApproval() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol [Line: 44](src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol#L44) + + ```solidity + function _onlyComplianceManager() internal virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol [Line: 38](src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol#L38) + + ```solidity + function transferred(address, address, uint256) public view override(IERC3643IComplianceContract) {} + ``` + +- Found in src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol [Line: 77](src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol#L77) + + ```solidity + function _transferred(address, address, uint256) internal view virtual override { + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 47](src/rules/validation/deployment/RuleBlacklist.sol#L47) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklist.sol [Line: 49](src/rules/validation/deployment/RuleBlacklist.sol#L49) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 25](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L25) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol [Line: 27](src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol#L27) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 65](src/rules/validation/deployment/RuleERC2980.sol#L65) + + ```solidity + function _authorizeWhitelistAdd() internal view virtual override onlyRole(WHITELIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 67](src/rules/validation/deployment/RuleERC2980.sol#L67) + + ```solidity + function _authorizeWhitelistRemove() internal view virtual override onlyRole(WHITELIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 69](src/rules/validation/deployment/RuleERC2980.sol#L69) + + ```solidity + function _authorizeFrozenlistAdd() internal view virtual override onlyRole(FROZENLIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980.sol [Line: 71](src/rules/validation/deployment/RuleERC2980.sol#L71) + + ```solidity + function _authorizeFrozenlistRemove() internal view virtual override onlyRole(FROZENLIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 33](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L33) + + ```solidity + function _authorizeWhitelistAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 35](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L35) + + ```solidity + function _authorizeWhitelistRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 37](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L37) + + ```solidity + function _authorizeFrozenlistAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleERC2980Ownable2Step.sol [Line: 39](src/rules/validation/deployment/RuleERC2980Ownable2Step.sol#L39) + + ```solidity + function _authorizeFrozenlistRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistry.sol [Line: 43](src/rules/validation/deployment/RuleIdentityRegistry.sol#L43) + + ```solidity + function _authorizeIdentityRegistryManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol [Line: 23](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L23) + + ```solidity + function _authorizeIdentityRegistryManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupply.sol [Line: 47](src/rules/validation/deployment/RuleMaxTotalSupply.sol#L47) + + ```solidity + function _authorizeMaxTotalSupplyManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol [Line: 26](src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol#L26) + + ```solidity + function _authorizeMaxTotalSupplyManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsList.sol [Line: 49](src/rules/validation/deployment/RuleSanctionsList.sol#L49) + + ```solidity + function _authorizeSanctionListManager() internal view virtual override onlyRole(SANCTIONLIST_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol [Line: 29](src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol#L29) + + ```solidity + function _authorizeSanctionListManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 44](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L44) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelist.sol [Line: 46](src/rules/validation/deployment/RuleSpenderWhitelist.sol#L46) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 28](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L28) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol [Line: 30](src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol#L30) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 62](src/rules/validation/deployment/RuleWhitelist.sol#L62) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 64](src/rules/validation/deployment/RuleWhitelist.sol#L64) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelist.sol [Line: 66](src/rules/validation/deployment/RuleWhitelist.sol#L66) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 34](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L34) + + ```solidity + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 36](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L36) + + ```solidity + function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol [Line: 38](src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol#L38) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 60](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L60) + + ```solidity + function _authorizeCheckSpenderManager() internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapper.sol [Line: 65](src/rules/validation/deployment/RuleWhitelistWrapper.sol#L65) + + ```solidity + function _onlyRulesManager() internal virtual override onlyRole(RULES_MANAGEMENT_ROLE) {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 32](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L32) + + ```solidity + function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + ``` + +- Found in src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol [Line: 37](src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol#L37) + + ```solidity + function _onlyRulesManager() internal view virtual override onlyOwner {} + ``` + +
+ + + +## L-7: Costly operations inside loop + +Invoking `SSTORE` operations in loops may waste gas. Use a local variable to hold the loop computation result. + +
6 Found Instances + + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 39](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L39) + + ```solidity + for (uint256 i = 0; i < addressesToAdd.length; ++i) { + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 61](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L61) + + ```solidity + for (uint256 i = 0; i < addressesToRemove.length; ++i) { + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 37](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L37) + + ```solidity + for (uint256 i = 0; i < addressesToAdd.length; ++i) { + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 50](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L50) + + ```solidity + for (uint256 i = 0; i < addressesToRemove.length; ++i) { + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 83](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L83) + + ```solidity + for (uint256 i = 0; i < addressesToAdd.length; ++i) { + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 96](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L96) + + ```solidity + for (uint256 i = 0; i < addressesToRemove.length; ++i) { + ``` + +
+ + + +## L-8: Unchecked Return + +Function returns a value but it is ignored. Consider checking the return value. + +
13 Found Instances + + +- Found in src/modules/AccessControlModuleStandalone.sol [Line: 32](src/modules/AccessControlModuleStandalone.sol#L32) + + ```solidity + _grantRole(DEFAULT_ADMIN_ROLE, admin); + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol [Line: 66](src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol#L66) + + ```solidity + _addAddresses(targetAddresses); + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol [Line: 78](src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol#L78) + + ```solidity + _removeAddresses(targetAddresses); + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 75](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L75) + + ```solidity + _listedAddresses.add(targetAddress); + ``` + +- Found in src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol [Line: 83](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L83) + + ```solidity + _listedAddresses.remove(targetAddress); + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 60](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L60) + + ```solidity + _whitelist.add(targetAddress); + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 64](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L64) + + ```solidity + _whitelist.remove(targetAddress); + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 106](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L106) + + ```solidity + _frozenlist.add(targetAddress); + ``` + +- Found in src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol [Line: 110](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L110) + + ```solidity + _frozenlist.remove(targetAddress); + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 86](src/rules/validation/abstract/base/RuleERC2980Base.sol#L86) + + ```solidity + _addWhitelistAddresses(targetAddresses); + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 95](src/rules/validation/abstract/base/RuleERC2980Base.sol#L95) + + ```solidity + _removeWhitelistAddresses(targetAddresses); + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 136](src/rules/validation/abstract/base/RuleERC2980Base.sol#L136) + + ```solidity + _addFrozenlistAddresses(targetAddresses); + ``` + +- Found in src/rules/validation/abstract/base/RuleERC2980Base.sol [Line: 145](src/rules/validation/abstract/base/RuleERC2980Base.sol#L145) + + ```solidity + _removeFrozenlistAddresses(targetAddresses); + ``` + +
+ + + diff --git a/doc/security/audits/tools/v0.3.0/slither-report-feedback.md b/doc/security/audits/tools/v0.3.0/slither-report-feedback.md new file mode 100644 index 0000000..24d2efe --- /dev/null +++ b/doc/security/audits/tools/v0.3.0/slither-report-feedback.md @@ -0,0 +1,94 @@ +# Slither Report — Feedback + +Report version: `v0.3.0` +Slither report: [slither-report.md](./slither-report.md) +Feedback date: 2026-04-16 + +Verdicts: + +| Verdict | Meaning | +|---|---| +| **Acknowledged** | Known, accepted by design; no change planned. | +| **Acknowledged — low impact** | Technically valid but actual risk is negligible given context. | +| **Fixed** | Resolved in the codebase. | +| **To fix** | Will be addressed in a future revision. | +| **False positive** | Tool mis-identification; no real issue exists. | +| **Out of scope** | Reported location is in dependency code outside this repository. | + +--- + +## arbitrary-send-erc20 (High) — ID-0 + +**Verdict: False positive** + +Flagged function: `RuleConditionalTransferLightBase.approveAndTransferIfAllowed(...)`. + +`from` is a parameter, but this is not an arbitrary-drain primitive because: + +1. Function access is restricted by `onlyTransferApprover`. +2. The contract checks `allowance(from, address(this)) >= value` before transfer. +3. The call path is part of a deliberate compliance workflow and executes against the single bound token. + +Using `SafeERC20.safeTransferFrom` does not change this authorization model; it only hardens ERC-20 return handling. + +--- + +## unused-return (Medium) — ID-1 to ID-6 + +**Verdict: False positive** + +Flagged calls are `EnumerableSet.add/remove` in internal single-item helpers. The external/public single-item entrypoints already perform precondition checks (present/not present), making the boolean return redundant in those internal helper implementations. + +--- + +## calls-loop (Low) — ID-7 to ID-22 + +**Verdict: Acknowledged — by design** + +All instances stem from `RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(...)`, which must query child whitelist rules to implement OR aggregation. External calls in this loop are intrinsic to the wrapper design. + +--- + +## assembly (Informational) — ID-23 + +**Verdict: Acknowledged — by design** + +`RuleConditionalTransferLightApprovalBase._transferHash(...)` uses a small, memory-safe assembly block to compute transfer tuple hash efficiently. This is intentional and bounded. + +--- + +## naming-convention (Informational) — ID-24 to ID-25 + +**Verdict: Acknowledged** + +`_operator` naming in `RuleERC2980Base.whitelist/frozenlist` mirrors the ERC-2980 interface naming. Keeping spec-aligned argument names is intentional. + +--- + +## unindexed-event-address (Informational) — ID-26 to ID-27 + +**Verdict: Out of scope** + +Both findings point to `lib/RuleEngine/src/interfaces/IERC3643Compliance.sol`, which is a dependency module under `lib/` and not maintained in this repository. + +--- + +## unused-state (Informational) — ID-28 to ID-35 + +**Verdict: False positive** + +All instances are `RuleNFTAdapter` selector constants reported as unused in specific concrete contracts. They are part of inherited dispatch logic and are used across adapter paths; this is a per-contract inheritance analysis limitation. + +--- + +## Summary + +| Category | Severity | IDs | Verdict | +|---|---|---|---| +| arbitrary-send-erc20 | High | ID-0 | False positive | +| unused-return | Medium | ID-1 to ID-6 | False positive | +| calls-loop | Low | ID-7 to ID-22 | Acknowledged — by design | +| assembly | Informational | ID-23 | Acknowledged — by design | +| naming-convention | Informational | ID-24 to ID-25 | Acknowledged | +| unindexed-event-address | Informational | ID-26 to ID-27 | Out of scope (lib/) | +| unused-state | Informational | ID-28 to ID-35 | False positive | diff --git a/doc/security/audits/tools/v0.3.0/slither-report.md b/doc/security/audits/tools/v0.3.0/slither-report.md new file mode 100644 index 0000000..da825b5 --- /dev/null +++ b/doc/security/audits/tools/v0.3.0/slither-report.md @@ -0,0 +1,313 @@ +**THIS CHECKLIST IS NOT COMPLETE**. Use `--show-ignored-findings` to show all the results. +Summary + - [arbitrary-send-erc20](#arbitrary-send-erc20) (1 results) (High) + - [unused-return](#unused-return) (6 results) (Medium) + - [calls-loop](#calls-loop) (16 results) (Low) + - [assembly](#assembly) (1 results) (Informational) + - [naming-convention](#naming-convention) (2 results) (Informational) + - [unindexed-event-address](#unindexed-event-address) (2 results) (Informational) + - [unused-state](#unused-state) (8 results) (Informational) +## arbitrary-send-erc20 +Impact: High +Confidence: High + - [ ] ID-0 +[RuleConditionalTransferLightBase.approveAndTransferIfAllowed(address,address,uint256)](src/rules/operation/abstract/RuleConditionalTransferLightBase.sol#L66-L81) uses arbitrary from in transferFrom: [IERC20(token).safeTransferFrom(from,to,value)](src/rules/operation/abstract/RuleConditionalTransferLightBase.sol#L79) + +src/rules/operation/abstract/RuleConditionalTransferLightBase.sol#L66-L81 + + +## unused-return +Impact: Medium +Confidence: Medium + - [ ] ID-1 +[RuleAddressSetInternal._removeAddress(address)](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L82-L84) ignores return value by [_listedAddresses.remove(targetAddress)](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L83) + +src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L82-L84 + + + - [ ] ID-2 +[RuleERC2980Internal._addWhitelistAddress(address)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L59-L61) ignores return value by [_whitelist.add(targetAddress)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L60) + +src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L59-L61 + + + - [ ] ID-3 +[RuleAddressSetInternal._addAddress(address)](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L74-L76) ignores return value by [_listedAddresses.add(targetAddress)](src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L75) + +src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol#L74-L76 + + + - [ ] ID-4 +[RuleERC2980Internal._removeWhitelistAddress(address)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L63-L65) ignores return value by [_whitelist.remove(targetAddress)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L64) + +src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L63-L65 + + + - [ ] ID-5 +[RuleERC2980Internal._addFrozenlistAddress(address)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L105-L107) ignores return value by [_frozenlist.add(targetAddress)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L106) + +src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L105-L107 + + + - [ ] ID-6 +[RuleERC2980Internal._removeFrozenlistAddress(address)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L109-L111) ignores return value by [_frozenlist.remove(targetAddress)](src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L110) + +src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol#L109-L111 + + +## calls-loop +Impact: Low +Confidence: Medium + - [ ] ID-7 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleTransferValidation.canTransfer(address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-8 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleWhitelistShared.transferred(address,address,address,uint256) + RuleWhitelistShared._transferredFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-9 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleWhitelistWrapperBase.isVerified(address) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-10 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleTransferValidation.detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-11 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.transferred(ITransferContext.MultiTokenTransferContext) + RuleWhitelistShared._transferredFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-12 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleWhitelistShared.transferred(address,address,uint256) + RuleWhitelistWrapperBase._transferred(address,address,uint256) + RuleWhitelistShared._transferred(address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-13 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.canTransferFrom(address,address,address,uint256,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-14 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleTransferValidation.detectTransferRestriction(address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-15 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.transferred(ITransferContext.FungibleTransferContext) + RuleWhitelistShared._transferredFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-16 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.transferred(address,address,uint256,uint256) + RuleWhitelistWrapperBase._transferred(address,address,uint256) + RuleWhitelistShared._transferred(address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-17 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleWhitelistWrapperHarnessInternal.exposedTransferredSpenderInternal(address,address,address,uint256) + RuleWhitelistWrapperBase._transferred(address,address,address,uint256) + RuleWhitelistShared._transferredFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-18 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.detectTransferRestriction(address,address,uint256,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-19 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.transferred(address,address,address,uint256,uint256) + RuleWhitelistShared._transferredFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-20 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.canTransfer(address,address,uint256,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-21 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleTransferValidation.canTransferFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + + - [ ] ID-22 +[RuleWhitelistWrapperBase._detectTransferRestrictionForTargets(address[])](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205) has external calls inside a loop: [isListed = IAddressList(rule(i)).areAddressesListed(targetAddress)](src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L185) + Calls stack containing the loop: + RuleNFTAdapter.detectTransferRestrictionFrom(address,address,address,uint256,uint256) + RuleWhitelistWrapperBase._detectTransferRestrictionFrom(address,address,address,uint256) + RuleWhitelistWrapperBase._detectTransferRestriction(address,address,uint256) + +src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol#L174-L205 + + +## assembly +Impact: Informational +Confidence: High + - [ ] ID-23 +[RuleConditionalTransferLightApprovalBase._transferHash(address,address,uint256)](src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol#L86-L95) uses assembly + - [INLINE ASM](src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol#L88-L94) + +src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol#L86-L95 + + +## naming-convention +Impact: Informational +Confidence: High + - [ ] ID-24 +Parameter [RuleERC2980Base.frozenlist(address)._operator](src/rules/validation/abstract/base/RuleERC2980Base.sol#L291) is not in mixedCase + +src/rules/validation/abstract/base/RuleERC2980Base.sol#L291 + + + - [ ] ID-25 +Parameter [RuleERC2980Base.whitelist(address)._operator](src/rules/validation/abstract/base/RuleERC2980Base.sol#L251) is not in mixedCase + +src/rules/validation/abstract/base/RuleERC2980Base.sol#L251 + + +## unindexed-event-address +Impact: Informational +Confidence: High + - [ ] ID-26 +Event [IERC3643Compliance.TokenBound(address)](lib/RuleEngine/src/interfaces/IERC3643Compliance.sol#L14) has address parameters but no indexed parameters + +lib/RuleEngine/src/interfaces/IERC3643Compliance.sol#L14 + + + - [ ] ID-27 +Event [IERC3643Compliance.TokenUnbound(address)](lib/RuleEngine/src/interfaces/IERC3643Compliance.sol#L20) has address parameters but no indexed parameters + +lib/RuleEngine/src/interfaces/IERC3643Compliance.sol#L20 + + +## unused-state +Impact: Informational +Confidence: High + - [ ] ID-28 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_RULE_ENGINE](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L21) is never used in [RuleIdentityRegistryOwnable2Step](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L12-L24) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L21 + + + - [ ] ID-29 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC7943](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L22-L23) is never used in [RuleIdentityRegistryOwnable2Step](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L12-L24) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L22-L23 + + + - [ ] ID-30 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC7943_FROM](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L24-L25) is never used in [RuleIdentityRegistryOwnable2Step](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L12-L24) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L24-L25 + + + - [ ] ID-31 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC3643](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L20) is never used in [RuleIdentityRegistryOwnable2Step](src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol#L12-L24) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L20 + + + - [ ] ID-32 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC7943](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L22-L23) is never used in [RuleIdentityRegistry](src/rules/validation/deployment/RuleIdentityRegistry.sol#L14-L44) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L22-L23 + + + - [ ] ID-33 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_RULE_ENGINE](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L21) is never used in [RuleIdentityRegistry](src/rules/validation/deployment/RuleIdentityRegistry.sol#L14-L44) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L21 + + + - [ ] ID-34 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC7943_FROM](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L24-L25) is never used in [RuleIdentityRegistry](src/rules/validation/deployment/RuleIdentityRegistry.sol#L14-L44) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L24-L25 + + + - [ ] ID-35 +[RuleNFTAdapter.TRANSFERRED_SELECTOR_ERC3643](src/rules/validation/abstract/core/RuleNFTAdapter.sol#L20) is never used in [RuleIdentityRegistry](src/rules/validation/deployment/RuleIdentityRegistry.sol#L14-L44) + +src/rules/validation/abstract/core/RuleNFTAdapter.sol#L20 + + diff --git a/doc/specification/RulesSpecificationv0.2.0.pdf b/doc/specification/RulesSpecificationv0.2.0.pdf new file mode 100644 index 0000000..4356e8a Binary files /dev/null and b/doc/specification/RulesSpecificationv0.2.0.pdf differ diff --git a/doc/specification/cover_page.odg b/doc/specification/cover_page.odg index 6b8293f..855eff6 100644 Binary files a/doc/specification/cover_page.odg and b/doc/specification/cover_page.odg differ diff --git a/doc/specification/cover_page.pdf b/doc/specification/cover_page.pdf new file mode 100644 index 0000000..0b3519c Binary files /dev/null and b/doc/specification/cover_page.pdf differ diff --git a/doc/surya/surya_graph/surya_graph_AccessControlModuleStandalone.sol.png b/doc/surya/surya_graph/surya_graph_AccessControlModuleStandalone.sol.png index 2e91f28..29deed4 100644 Binary files a/doc/surya/surya_graph/surya_graph_AccessControlModuleStandalone.sol.png and b/doc/surya/surya_graph/surya_graph_AccessControlModuleStandalone.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_DeploymentCoverageHarnesses.sol.png b/doc/surya/surya_graph/surya_graph_DeploymentCoverageHarnesses.sol.png index fb91b43..9f38bf3 100644 Binary files a/doc/surya/surya_graph/surya_graph_DeploymentCoverageHarnesses.sol.png and b/doc/surya/surya_graph/surya_graph_DeploymentCoverageHarnesses.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IAddressList.sol.png b/doc/surya/surya_graph/surya_graph_IAddressList.sol.png index c951488..0e08167 100644 Binary files a/doc/surya/surya_graph/surya_graph_IAddressList.sol.png and b/doc/surya/surya_graph/surya_graph_IAddressList.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IERC2980.sol.png b/doc/surya/surya_graph/surya_graph_IERC2980.sol.png index 217334b..f5a4ba9 100644 Binary files a/doc/surya/surya_graph/surya_graph_IERC2980.sol.png and b/doc/surya/surya_graph/surya_graph_IERC2980.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IERC3643ComplianceFull.sol.png b/doc/surya/surya_graph/surya_graph_IERC3643ComplianceFull.sol.png new file mode 100644 index 0000000..ca029c7 Binary files /dev/null and b/doc/surya/surya_graph/surya_graph_IERC3643ComplianceFull.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IERC7943NonFungibleCompliance.sol.png b/doc/surya/surya_graph/surya_graph_IERC7943NonFungibleCompliance.sol.png index a7fc4e3..fb5cd4c 100644 Binary files a/doc/surya/surya_graph/surya_graph_IERC7943NonFungibleCompliance.sol.png and b/doc/surya/surya_graph/surya_graph_IERC7943NonFungibleCompliance.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IIdentityRegistry.sol.png b/doc/surya/surya_graph/surya_graph_IIdentityRegistry.sol.png index 45f3c88..216f70e 100644 Binary files a/doc/surya/surya_graph/surya_graph_IIdentityRegistry.sol.png and b/doc/surya/surya_graph/surya_graph_IIdentityRegistry.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_ISanctionsList.sol.png b/doc/surya/surya_graph/surya_graph_ISanctionsList.sol.png index 549f787..e66e2db 100644 Binary files a/doc/surya/surya_graph/surya_graph_ISanctionsList.sol.png and b/doc/surya/surya_graph/surya_graph_ISanctionsList.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_ITotalSupply.sol.png b/doc/surya/surya_graph/surya_graph_ITotalSupply.sol.png index 04d1a90..8f1a033 100644 Binary files a/doc/surya/surya_graph/surya_graph_ITotalSupply.sol.png and b/doc/surya/surya_graph/surya_graph_ITotalSupply.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_ITransferContext.sol.png b/doc/surya/surya_graph/surya_graph_ITransferContext.sol.png index 8a27cb8..276a284 100644 Binary files a/doc/surya/surya_graph/surya_graph_ITransferContext.sol.png and b/doc/surya/surya_graph/surya_graph_ITransferContext.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_IdentityRegistryMock.sol.png b/doc/surya/surya_graph/surya_graph_IdentityRegistryMock.sol.png index 35781cc..c0f8f20 100644 Binary files a/doc/surya/surya_graph/surya_graph_IdentityRegistryMock.sol.png and b/doc/surya/surya_graph/surya_graph_IdentityRegistryMock.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_MetaTxModuleStandalone.sol.png b/doc/surya/surya_graph/surya_graph_MetaTxModuleStandalone.sol.png index e066bfa..ab6da43 100644 Binary files a/doc/surya/surya_graph/surya_graph_MetaTxModuleStandalone.sol.png and b/doc/surya/surya_graph/surya_graph_MetaTxModuleStandalone.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_MockERC20TransferFromFalse.sol.png b/doc/surya/surya_graph/surya_graph_MockERC20TransferFromFalse.sol.png index af13e5e..003c436 100644 Binary files a/doc/surya/surya_graph/surya_graph_MockERC20TransferFromFalse.sol.png and b/doc/surya/surya_graph/surya_graph_MockERC20TransferFromFalse.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_MockERC20WithTransferContext.sol.png b/doc/surya/surya_graph/surya_graph_MockERC20WithTransferContext.sol.png index 7ae1874..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_MockERC20WithTransferContext.sol.png and b/doc/surya/surya_graph/surya_graph_MockERC20WithTransferContext.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_MockERC721WithTransferContext.sol.png b/doc/surya/surya_graph/surya_graph_MockERC721WithTransferContext.sol.png index 74ab93c..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_MockERC721WithTransferContext.sol.png and b/doc/surya/surya_graph/surya_graph_MockERC721WithTransferContext.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleAddressSet.sol.png b/doc/surya/surya_graph/surya_graph_RuleAddressSet.sol.png index d11eed5..92f6353 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleAddressSet.sol.png and b/doc/surya/surya_graph/surya_graph_RuleAddressSet.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleAddressSetInternal.sol.png b/doc/surya/surya_graph/surya_graph_RuleAddressSetInternal.sol.png index 92799bc..ba036a5 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleAddressSetInternal.sol.png and b/doc/surya/surya_graph/surya_graph_RuleAddressSetInternal.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleAddressSetInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleAddressSetInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleAddressSetInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleAddressSetInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleBlacklist.sol.png b/doc/surya/surya_graph/surya_graph_RuleBlacklist.sol.png index 2467398..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleBlacklist.sol.png and b/doc/surya/surya_graph/surya_graph_RuleBlacklist.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleBlacklistBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleBlacklistBase.sol.png index e721253..a9c5568 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleBlacklistBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleBlacklistBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleBlacklistInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleBlacklistInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleBlacklistInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleBlacklistInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable.sol.png b/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable.sol.png deleted file mode 100644 index 767d5c9..0000000 Binary files a/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable.sol.png and /dev/null differ diff --git a/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable2Step.sol.png index aef0cbe..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleBlacklistOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleCommonInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleCommonInvariantStorage.sol.png deleted file mode 100644 index e166f8f..0000000 Binary files a/doc/surya/surya_graph/surya_graph_RuleCommonInvariantStorage.sol.png and /dev/null differ diff --git a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLight.sol.png b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLight.sol.png index 2b5ab95..184ce94 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLight.sol.png and b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLight.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightApprovalBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightApprovalBase.sol.png new file mode 100644 index 0000000..87a6565 Binary files /dev/null and b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightApprovalBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightBase.sol.png index db7e97a..851ca72 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightOwnable2Step.sol.png index 8a6a3ad..1138317 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleConditionalTransferLightOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleERC2980.sol.png b/doc/surya/surya_graph/surya_graph_RuleERC2980.sol.png index 389946a..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleERC2980.sol.png and b/doc/surya/surya_graph/surya_graph_RuleERC2980.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleERC2980Base.sol.png b/doc/surya/surya_graph/surya_graph_RuleERC2980Base.sol.png index ad99fb7..553421c 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleERC2980Base.sol.png and b/doc/surya/surya_graph/surya_graph_RuleERC2980Base.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleERC2980Internal.sol.png b/doc/surya/surya_graph/surya_graph_RuleERC2980Internal.sol.png index b759a2d..39a3907 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleERC2980Internal.sol.png and b/doc/surya/surya_graph/surya_graph_RuleERC2980Internal.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleERC2980InvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleERC2980InvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleERC2980InvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleERC2980InvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleERC2980Ownable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleERC2980Ownable2Step.sol.png index 344ecd6..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleERC2980Ownable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleERC2980Ownable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistry.sol.png b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistry.sol.png index 7653a0b..e1d4147 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistry.sol.png and b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistry.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryBase.sol.png index 0cc6d5a..ff37491 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryOwnable2Step.sol.png index 9fc978a..2740710 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleIdentityRegistryOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupply.sol.png b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupply.sol.png index 4605ec2..75bc944 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupply.sol.png and b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupply.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyBase.sol.png index 328cf8a..fa6c8ad 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyOwnable2Step.sol.png index 5093934..478dd4c 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleMaxTotalSupplyOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleNFTAdapter.sol.png b/doc/surya/surya_graph/surya_graph_RuleNFTAdapter.sol.png index 3c1ae13..3197aaa 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleNFTAdapter.sol.png and b/doc/surya/surya_graph/surya_graph_RuleNFTAdapter.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSanctionsList.sol.png b/doc/surya/surya_graph/surya_graph_RuleSanctionsList.sol.png index bab51b1..9ed5b46 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSanctionsList.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSanctionsList.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSanctionsListBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleSanctionsListBase.sol.png index 3f43c31..aeea5f2 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSanctionsListBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSanctionsListBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSanctionsListInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleSanctionsListInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSanctionsListInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSanctionsListInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2Step.sol.png index c659efc..efe30a2 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2StepHarness.sol.png b/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2StepHarness.sol.png index 4e91ef8..0bc99eb 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2StepHarness.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSanctionsListOwnable2StepHarness.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSharedInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleSharedInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSharedInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSharedInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelist.sol.png b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelist.sol.png index 5fc9eb1..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelist.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelist.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistBase.sol.png index ad790f2..2095cd9 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistHarnesses.sol.png b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistHarnesses.sol.png index 886371e..516bcc3 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistHarnesses.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistHarnesses.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistOwnable2Step.sol.png index a1ef461..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleSpenderWhitelistOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleTransferValidation.sol.png b/doc/surya/surya_graph/surya_graph_RuleTransferValidation.sol.png index d966b58..a81af27 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleTransferValidation.sol.png and b/doc/surya/surya_graph/surya_graph_RuleTransferValidation.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleValidateTransfer.sol.png b/doc/surya/surya_graph/surya_graph_RuleValidateTransfer.sol.png deleted file mode 100644 index b59e0ba..0000000 Binary files a/doc/surya/surya_graph/surya_graph_RuleValidateTransfer.sol.png and /dev/null differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelist.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelist.sol.png index cd0cfe4..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelist.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelist.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistBase.sol.png index 9047347..49ddfce 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistCommon.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistCommon.sol.png deleted file mode 100644 index 304d638..0000000 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistCommon.sol.png and /dev/null differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistInvariantStorage.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistInvariantStorage.sol.png index e166f8f..5b4fa6b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistInvariantStorage.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistInvariantStorage.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable.sol.png deleted file mode 100644 index bebcd13..0000000 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable.sol.png and /dev/null differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable2Step.sol.png index f508aa4..e69de29 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistShared.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistShared.sol.png index db3892c..54b5e88 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistShared.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistShared.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapper.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapper.sol.png index 87b48dd..071894a 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapper.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapper.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperBase.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperBase.sol.png index 3521d1e..07a074e 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperBase.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperBase.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperHarnessInternal.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperHarnessInternal.sol.png index ddc2deb..ff9f52b 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperHarnessInternal.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperHarnessInternal.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperOwnable2Step.sol.png b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperOwnable2Step.sol.png index b95970a..9d1c456 100644 Binary files a/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperOwnable2Step.sol.png and b/doc/surya/surya_graph/surya_graph_RuleWhitelistWrapperOwnable2Step.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_SanctionListOracle.sol.png b/doc/surya/surya_graph/surya_graph_SanctionListOracle.sol.png index cea1cc0..aeae4da 100644 Binary files a/doc/surya/surya_graph/surya_graph_SanctionListOracle.sol.png and b/doc/surya/surya_graph/surya_graph_SanctionListOracle.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_TotalSupplyMock.sol.png b/doc/surya/surya_graph/surya_graph_TotalSupplyMock.sol.png index 3cc02f5..9009bdf 100644 Binary files a/doc/surya/surya_graph/surya_graph_TotalSupplyMock.sol.png and b/doc/surya/surya_graph/surya_graph_TotalSupplyMock.sol.png differ diff --git a/doc/surya/surya_graph/surya_graph_VersionModule.sol.png b/doc/surya/surya_graph/surya_graph_VersionModule.sol.png index 6d3a741..bb072c9 100644 Binary files a/doc/surya/surya_graph/surya_graph_VersionModule.sol.png and b/doc/surya/surya_graph/surya_graph_VersionModule.sol.png differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_IERC3643ComplianceFull.sol.png b/doc/surya/surya_inheritance/surya_inheritance_IERC3643ComplianceFull.sol.png new file mode 100644 index 0000000..8c1af35 Binary files /dev/null and b/doc/surya/surya_inheritance/surya_inheritance_IERC3643ComplianceFull.sol.png differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleBlacklistOwnable.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleBlacklistOwnable.sol.png deleted file mode 100644 index edde035..0000000 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleBlacklistOwnable.sol.png and /dev/null differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleCommonInvariantStorage.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleCommonInvariantStorage.sol.png deleted file mode 100644 index d521a63..0000000 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleCommonInvariantStorage.sol.png and /dev/null differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLight.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLight.sol.png index 4c9aa66..d56372a 100644 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLight.sol.png and b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLight.sol.png differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightApprovalBase.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightApprovalBase.sol.png new file mode 100644 index 0000000..0c43e6a Binary files /dev/null and b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightApprovalBase.sol.png differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightBase.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightBase.sol.png index 10ba851..bf44421 100644 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightBase.sol.png and b/doc/surya/surya_inheritance/surya_inheritance_RuleConditionalTransferLightBase.sol.png differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleValidateTransfer.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleValidateTransfer.sol.png deleted file mode 100644 index 9752783..0000000 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleValidateTransfer.sol.png and /dev/null differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistCommon.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistCommon.sol.png deleted file mode 100644 index 7531b5e..0000000 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistCommon.sol.png and /dev/null differ diff --git a/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistOwnable.sol.png b/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistOwnable.sol.png deleted file mode 100644 index 37732ca..0000000 Binary files a/doc/surya/surya_inheritance/surya_inheritance_RuleWhitelistOwnable.sol.png and /dev/null differ diff --git a/doc/surya/surya_report/surya_report_AccessControlModuleStandalone.sol.md b/doc/surya/surya_report/surya_report_AccessControlModuleStandalone.sol.md index 6e621a8..3b9fb79 100644 --- a/doc/surya/surya_report/surya_report_AccessControlModuleStandalone.sol.md +++ b/doc/surya/surya_report/surya_report_AccessControlModuleStandalone.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./modules/AccessControlModuleStandalone.sol | 2cc35fc3e9e22b70ad12a09380ffc25b9201f893 | +| ./modules/AccessControlModuleStandalone.sol | 1c7c0ffeb2ce2999fb14155cf49b1bb2339cc335 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_DeploymentCoverageHarnesses.sol.md b/doc/surya/surya_report/surya_report_DeploymentCoverageHarnesses.sol.md index 3214d4b..9d4f2b7 100644 --- a/doc/surya/surya_report/surya_report_DeploymentCoverageHarnesses.sol.md +++ b/doc/surya/surya_report/surya_report_DeploymentCoverageHarnesses.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/harness/DeploymentCoverageHarnesses.sol | efef241e157c319d20144f266ca0228a74ddb8b2 | +| ./mocks/harness/DeploymentCoverageHarnesses.sol | 51b794406806bfd8380bb4177ab3272724702184 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleBlacklistOwnable.sol.md b/doc/surya/surya_report/surya_report_IERC3643ComplianceFull.sol.md similarity index 50% rename from doc/surya/surya_report/surya_report_RuleBlacklistOwnable.sol.md rename to doc/surya/surya_report/surya_report_IERC3643ComplianceFull.sol.md index 6b969d0..9d4116b 100644 --- a/doc/surya/surya_report/surya_report_RuleBlacklistOwnable.sol.md +++ b/doc/surya/surya_report/surya_report_IERC3643ComplianceFull.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/RuleBlacklistOwnable.sol | 56bdd344912082ab41e3afbd87f41b3a6e9dfb72 | +| ./mocks/IERC3643ComplianceFull.sol | 544dbc778c45d888ee9cdb28f507df53fe055edf | ### Contracts Description Table @@ -15,13 +15,15 @@ |:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| -| **RuleBlacklistOwnable** | Implementation | RuleBlacklistBase, Ownable2Step ||| -| └ | | Public ❗️ | 🛑 | RuleBlacklistBase Ownable | -| └ | _authorizeAddressListAdd | Internal 🔒 | | | -| └ | _authorizeAddressListRemove | Internal 🔒 | | | -| └ | _msgSender | Internal 🔒 | | | -| └ | _msgData | Internal 🔒 | | | -| └ | _contextSuffixLength | Internal 🔒 | | | +| **IERC3643ComplianceFull** | Interface | ||| +| └ | canTransfer | External ❗️ | |NO❗️ | +| └ | transferred | External ❗️ | 🛑 |NO❗️ | +| └ | bindToken | External ❗️ | 🛑 |NO❗️ | +| └ | unbindToken | External ❗️ | 🛑 |NO❗️ | +| └ | isTokenBound | External ❗️ | |NO❗️ | +| └ | getTokenBound | External ❗️ | |NO❗️ | +| └ | created | External ❗️ | 🛑 |NO❗️ | +| └ | destroyed | External ❗️ | 🛑 |NO❗️ | ### Legend diff --git a/doc/surya/surya_report/surya_report_IdentityRegistryMock.sol.md b/doc/surya/surya_report/surya_report_IdentityRegistryMock.sol.md index a1695d1..85a97b1 100644 --- a/doc/surya/surya_report/surya_report_IdentityRegistryMock.sol.md +++ b/doc/surya/surya_report/surya_report_IdentityRegistryMock.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/IdentityRegistryMock.sol | 81a48dbb5b0f632020ce23003bc49e31f79e2e37 | +| ./mocks/IdentityRegistryMock.sol | 52729f353f3783df05156fb7703e84d39b84167e | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_MetaTxModuleStandalone.sol.md b/doc/surya/surya_report/surya_report_MetaTxModuleStandalone.sol.md index e71477c..332a4ea 100644 --- a/doc/surya/surya_report/surya_report_MetaTxModuleStandalone.sol.md +++ b/doc/surya/surya_report/surya_report_MetaTxModuleStandalone.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./modules/MetaTxModuleStandalone.sol | c35aa26fde428024c80ea7421da7404d506606f4 | +| ./modules/MetaTxModuleStandalone.sol | 6467a67732560062997934fc1852cd96eda1fab3 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_MockERC20TransferFromFalse.sol.md b/doc/surya/surya_report/surya_report_MockERC20TransferFromFalse.sol.md index 919b4bf..397613c 100644 --- a/doc/surya/surya_report/surya_report_MockERC20TransferFromFalse.sol.md +++ b/doc/surya/surya_report/surya_report_MockERC20TransferFromFalse.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/MockERC20TransferFromFalse.sol | 126dbf9c338c740bfbdd73b9cbc930137e96e64d | +| ./mocks/MockERC20TransferFromFalse.sol | 7e9fe543cc9f7a8e3f6ec3b8285d70526b2639c7 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_MockERC20WithTransferContext.sol.md b/doc/surya/surya_report/surya_report_MockERC20WithTransferContext.sol.md index bc70198..0ebab99 100644 --- a/doc/surya/surya_report/surya_report_MockERC20WithTransferContext.sol.md +++ b/doc/surya/surya_report/surya_report_MockERC20WithTransferContext.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/MockERC20WithTransferContext.sol | fa64b379e094097f646856ba2ea52463112c3555 | +| ./mocks/MockERC20WithTransferContext.sol | 657e5680617872717c6a5b9e9f801c5c4594b821 | ### Contracts Description Table @@ -19,10 +19,10 @@ | └ | | Public ❗️ | 🛑 | ERC20 | | └ | setRule | External ❗️ | 🛑 |NO❗️ | | └ | mint | External ❗️ | 🛑 |NO❗️ | -| └ | transfer | Public ❗️ | 🛑 |NO❗️ | -| └ | transferFrom | Public ❗️ | 🛑 |NO❗️ | | └ | transferWithContext | External ❗️ | 🛑 |NO❗️ | | └ | transferFromWithContext | External ❗️ | 🛑 |NO❗️ | +| └ | transfer | Public ❗️ | 🛑 |NO❗️ | +| └ | transferFrom | Public ❗️ | 🛑 |NO❗️ | | └ | _notifyFungible | Internal 🔒 | 🛑 | | | └ | _notifyMultiToken | Internal 🔒 | 🛑 | | diff --git a/doc/surya/surya_report/surya_report_MockERC721WithTransferContext.sol.md b/doc/surya/surya_report/surya_report_MockERC721WithTransferContext.sol.md index 8debf0e..6a95fca 100644 --- a/doc/surya/surya_report/surya_report_MockERC721WithTransferContext.sol.md +++ b/doc/surya/surya_report/surya_report_MockERC721WithTransferContext.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/MockERC721WithTransferContext.sol | 93cbfe1335f8121dec4b4424973cf0a6e623fa59 | +| ./mocks/MockERC721WithTransferContext.sol | 7f7b1da23845193ea703336af8bf0c8f4f66956d | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleAddressSet.sol.md b/doc/surya/surya_report/surya_report_RuleAddressSet.sol.md index d46c16c..5c2fcf6 100644 --- a/doc/surya/surya_report/surya_report_RuleAddressSet.sol.md +++ b/doc/surya/surya_report/surya_report_RuleAddressSet.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol | a3c3be817c875ac39b08a0c7b06b97f1d3a4c440 | +| ./rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol | 2b2c138a17fd651aa8bc8346df863c7fc08ffeb3 | ### Contracts Description Table @@ -17,12 +17,12 @@ |||||| | **RuleAddressSet** | Implementation | MetaTxModuleStandalone, RuleAddressSetInternal, RuleAddressSetInvariantStorage, IAddressList ||| | └ | | Public ❗️ | 🛑 | MetaTxModuleStandalone | +| └ | _authorizeAddressListAdd | Internal 🔒 | | | +| └ | _authorizeAddressListRemove | Internal 🔒 | | | | └ | addAddresses | Public ❗️ | 🛑 | onlyAddressListAdd | | └ | removeAddresses | Public ❗️ | 🛑 | onlyAddressListRemove | | └ | addAddress | Public ❗️ | 🛑 | onlyAddressListAdd | | └ | removeAddress | Public ❗️ | 🛑 | onlyAddressListRemove | -| └ | _authorizeAddressListAdd | Internal 🔒 | | | -| └ | _authorizeAddressListRemove | Internal 🔒 | | | | └ | listedAddressCount | Public ❗️ | |NO❗️ | | └ | contains | Public ❗️ | |NO❗️ | | └ | isAddressListed | Public ❗️ | |NO❗️ | diff --git a/doc/surya/surya_report/surya_report_RuleAddressSetInternal.sol.md b/doc/surya/surya_report/surya_report_RuleAddressSetInternal.sol.md index ddfdb85..4f53607 100644 --- a/doc/surya/surya_report/surya_report_RuleAddressSetInternal.sol.md +++ b/doc/surya/surya_report/surya_report_RuleAddressSetInternal.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol | 61850ffd777b0d2df65b50258100a0bfba79765c | +| ./rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol | 1c962935e41f98f081c56290f77322eb6787ef14 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleAddressSetInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleAddressSetInvariantStorage.sol.md index 8109e86..677d082 100644 --- a/doc/surya/surya_report/surya_report_RuleAddressSetInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleAddressSetInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol | ab4e70b8488b96745acdd21f2ba6a47c36a129ce | +| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol | dbb32b305ba44a039e4c3783583d5e80ec237479 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleBlacklist.sol.md b/doc/surya/surya_report/surya_report_RuleBlacklist.sol.md index e1a6f8d..cd6e0c2 100644 --- a/doc/surya/surya_report/surya_report_RuleBlacklist.sol.md +++ b/doc/surya/surya_report/surya_report_RuleBlacklist.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleBlacklist.sol | 4bf9ad173243b77e6bc78a9c870509454437fd48 | +| ./rules/validation/deployment/RuleBlacklist.sol | 6fb955444f634508bb273ed89b3e9c793a63ddd1 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleBlacklistBase.sol.md b/doc/surya/surya_report/surya_report_RuleBlacklistBase.sol.md index 1d34304..240f9d4 100644 --- a/doc/surya/surya_report/surya_report_RuleBlacklistBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleBlacklistBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleBlacklistBase.sol | ec66a18aa4908019e16c6d570202260524c44904 | +| ./rules/validation/abstract/base/RuleBlacklistBase.sol | a9e7acac4f30169f321bcc9b36a932a8e100da63 | ### Contracts Description Table @@ -17,13 +17,13 @@ |||||| | **RuleBlacklistBase** | Implementation | RuleAddressSet, RuleNFTAdapter, RuleBlacklistInvariantStorage ||| | └ | | Public ❗️ | 🛑 | RuleAddressSet | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | +| └ | transferred | Public ❗️ | |NO❗️ | +| └ | transferred | Public ❗️ | |NO❗️ | | └ | canReturnTransferRestrictionCode | Public ❗️ | |NO❗️ | | └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | | └ | supportsInterface | Public ❗️ | |NO❗️ | -| └ | transferred | Public ❗️ | |NO❗️ | -| └ | transferred | Public ❗️ | |NO❗️ | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _transferredFrom | Internal 🔒 | | | diff --git a/doc/surya/surya_report/surya_report_RuleBlacklistInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleBlacklistInvariantStorage.sol.md index 961d7e2..bf4fe7e 100644 --- a/doc/surya/surya_report/surya_report_RuleBlacklistInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleBlacklistInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol | d3f1c084086821a5ec13825d4f8488c552947ac6 | +| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol | 4d408462eab6f20ab07dc32a28e324a2d872a6a1 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleBlacklistOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleBlacklistOwnable2Step.sol.md index e685d62..3b4d15f 100644 --- a/doc/surya/surya_report/surya_report_RuleBlacklistOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleBlacklistOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleBlacklistOwnable2Step.sol | 52a9b745423b9706c4c88fc8aee35f4d5020c176 | +| ./rules/validation/deployment/RuleBlacklistOwnable2Step.sol | 7124f42b2a3b6352300ffdaba32b8f6ce31862bd | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleCommonInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleCommonInvariantStorage.sol.md deleted file mode 100644 index 6867c91..0000000 --- a/doc/surya/surya_report/surya_report_RuleCommonInvariantStorage.sol.md +++ /dev/null @@ -1,26 +0,0 @@ -## Sūrya's Description Report - -### Files Description Table - - -| File Name | SHA-1 Hash | -|-------------|--------------| -| ./rules/validation/abstract/invariant/RuleCommonInvariantStorage.sol | e7242cf88a7a7587c6cd039642c300481b90a8d6 | - - -### Contracts Description Table - - -| Contract | Type | Bases | | | -|:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| -| └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | -|||||| -| **RuleCommonInvariantStorage** | Implementation | ||| - - -### Legend - -| Symbol | Meaning | -|:--------:|-----------| -| 🛑 | Function can modify state | -| 💵 | Function is payable | diff --git a/doc/surya/surya_report/surya_report_RuleConditionalTransferLight.sol.md b/doc/surya/surya_report/surya_report_RuleConditionalTransferLight.sol.md index f613b8f..bc4c64c 100644 --- a/doc/surya/surya_report/surya_report_RuleConditionalTransferLight.sol.md +++ b/doc/surya/surya_report/surya_report_RuleConditionalTransferLight.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/operation/RuleConditionalTransferLight.sol | 81491b418d569b10e02f08058beea7080fb943f6 | +| ./rules/operation/RuleConditionalTransferLight.sol | 0296e0b6f9efba3f65c654982ee5e8b8b0d6b52c | ### Contracts Description Table @@ -15,13 +15,10 @@ |:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| -| **RuleConditionalTransferLight** | Implementation | AccessControlModuleStandalone, ERC3643ComplianceModule, RuleConditionalTransferLightBase ||| +| **RuleConditionalTransferLight** | Implementation | AccessControlModuleStandalone, RuleConditionalTransferLightBase ||| | └ | | Public ❗️ | 🛑 | AccessControlModuleStandalone | | └ | supportsInterface | Public ❗️ | |NO❗️ | -| └ | created | External ❗️ | 🛑 | onlyBoundToken | -| └ | destroyed | External ❗️ | 🛑 | onlyBoundToken | | └ | _authorizeTransferApproval | Internal 🔒 | | onlyRole | -| └ | _authorizeTransferExecution | Internal 🔒 | | | | └ | _onlyComplianceManager | Internal 🔒 | 🛑 | onlyRole | diff --git a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightApprovalBase.sol.md b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightApprovalBase.sol.md new file mode 100644 index 0000000..2b38f0b --- /dev/null +++ b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightApprovalBase.sol.md @@ -0,0 +1,35 @@ +## Sūrya's Description Report + +### Files Description Table + + +| File Name | SHA-1 Hash | +|-------------|--------------| +| ./rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol | 6aa6f8cfabdb795343debc1b501508f392428404 | + + +### Contracts Description Table + + +| Contract | Type | Bases | | | +|:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| +| └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | +|||||| +| **RuleConditionalTransferLightApprovalBase** | Implementation | RuleConditionalTransferLightInvariantStorage ||| +| └ | _authorizeTransferApproval | Internal 🔒 | | | +| └ | _authorizeTransferExecution | Internal 🔒 | | | +| └ | transferred | External ❗️ | 🛑 | onlyTransferExecutor | +| └ | approveTransfer | Public ❗️ | 🛑 | onlyTransferApprover | +| └ | cancelTransferApproval | Public ❗️ | 🛑 | onlyTransferApprover | +| └ | approvedCount | Public ❗️ | |NO❗️ | +| └ | _transferredFromContext | Internal 🔒 | 🛑 | | +| └ | _transferred | Internal 🔒 | 🛑 | | +| └ | _transferHash | Internal 🔒 | | | + + +### Legend + +| Symbol | Meaning | +|:--------:|-----------| +| 🛑 | Function can modify state | +| 💵 | Function is payable | diff --git a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightBase.sol.md b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightBase.sol.md index 075c449..2a94c95 100644 --- a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/operation/abstract/RuleConditionalTransferLightBase.sol | 649f37246378014573f7368fa573f21c4b15d679 | +| ./rules/operation/abstract/RuleConditionalTransferLightBase.sol | 32e9a0425e0706764501785c3a4220b65ddeaec7 | ### Contracts Description Table @@ -15,24 +15,19 @@ |:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| -| **RuleConditionalTransferLightBase** | Implementation | VersionModule, RuleConditionalTransferLightInvariantStorage, IRule ||| -| └ | approveTransfer | Public ❗️ | 🛑 | onlyTransferApprover | -| └ | cancelTransferApproval | Public ❗️ | 🛑 | onlyTransferApprover | +| **RuleConditionalTransferLightBase** | Implementation | VersionModule, ERC3643ComplianceModule, RuleConditionalTransferLightApprovalBase, IRule ||| +| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | +| └ | messageForTransferRestriction | External ❗️ | |NO❗️ | +| └ | created | External ❗️ | 🛑 | onlyBoundToken | +| └ | destroyed | External ❗️ | 🛑 | onlyBoundToken | | └ | approveAndTransferIfAllowed | Public ❗️ | 🛑 | onlyTransferApprover | -| └ | approvedCount | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | 🛑 | onlyTransferExecutor | | └ | transferred | Public ❗️ | 🛑 | onlyTransferExecutor | +| └ | bindToken | Public ❗️ | 🛑 | onlyComplianceManager | | └ | detectTransferRestriction | Public ❗️ | |NO❗️ | | └ | detectTransferRestrictionFrom | Public ❗️ | |NO❗️ | | └ | canTransfer | Public ❗️ | |NO❗️ | | └ | canTransferFrom | Public ❗️ | |NO❗️ | -| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | External ❗️ | |NO❗️ | -| └ | transferred | External ❗️ | 🛑 | onlyTransferExecutor | -| └ | _transferredFromContext | Internal 🔒 | 🛑 | | -| └ | _transferred | Internal 🔒 | 🛑 | | -| └ | _transferHash | Internal 🔒 | | | -| └ | _authorizeTransferApproval | Internal 🔒 | | | | └ | _authorizeTransferExecution | Internal 🔒 | | | diff --git a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightInvariantStorage.sol.md index 93c5fa4..99855f3 100644 --- a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol | db973443a192d9342f2d19b9909e00744e488439 | +| ./rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol | 0acfbcd70d2a7a70fc2d244345cb363acff8def9 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightOwnable2Step.sol.md index 6bcd7c1..fdf137b 100644 --- a/doc/surya/surya_report/surya_report_RuleConditionalTransferLightOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleConditionalTransferLightOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/operation/RuleConditionalTransferLightOwnable2Step.sol | 8687e3c3162af3f4863d713cf56b5895a724dc97 | +| ./rules/operation/RuleConditionalTransferLightOwnable2Step.sol | 52c514a3996546640354595fd890941d0f8875ac | ### Contracts Description Table @@ -19,7 +19,7 @@ | └ | | Public ❗️ | 🛑 | Ownable | | └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | _authorizeTransferApproval | Internal 🔒 | | onlyOwner | -| └ | _authorizeTransferExecution | Internal 🔒 | | onlyOwner | +| └ | _onlyComplianceManager | Internal 🔒 | 🛑 | onlyOwner | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleERC2980.sol.md b/doc/surya/surya_report/surya_report_RuleERC2980.sol.md index e8339b9..30beca3 100644 --- a/doc/surya/surya_report/surya_report_RuleERC2980.sol.md +++ b/doc/surya/surya_report/surya_report_RuleERC2980.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleERC2980.sol | b87580207068c728624349e0453fee91c3b90605 | +| ./rules/validation/deployment/RuleERC2980.sol | 7d6e48bf6d899b27e31232a81f74fd04f19d6e76 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleERC2980Base.sol.md b/doc/surya/surya_report/surya_report_RuleERC2980Base.sol.md index b57d274..db7ccbb 100644 --- a/doc/surya/surya_report/surya_report_RuleERC2980Base.sol.md +++ b/doc/surya/surya_report/surya_report_RuleERC2980Base.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleERC2980Base.sol | d50ea84a4570130dffdd7940cd40004b6f6a2eb0 | +| ./rules/validation/abstract/base/RuleERC2980Base.sol | 8cffbdad2d3c9179d43521bd57610ee8f3a47178 | ### Contracts Description Table @@ -17,36 +17,36 @@ |||||| | **RuleERC2980Base** | Implementation | MetaTxModuleStandalone, RuleERC2980Internal, RuleERC2980InvariantStorage, RuleNFTAdapter, IERC2980, IIdentityRegistryVerified ||| | └ | | Public ❗️ | 🛑 | MetaTxModuleStandalone | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | -| └ | transferred | Public ❗️ | |NO❗️ | -| └ | transferred | Public ❗️ | |NO❗️ | -| └ | _transferred | Internal 🔒 | | | -| └ | _transferredFrom | Internal 🔒 | | | -| └ | canReturnTransferRestrictionCode | Public ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | +| └ | _authorizeWhitelistAdd | Internal 🔒 | | | +| └ | _authorizeWhitelistRemove | Internal 🔒 | | | +| └ | _authorizeFrozenlistAdd | Internal 🔒 | | | +| └ | _authorizeFrozenlistRemove | Internal 🔒 | | | | └ | addWhitelistAddresses | Public ❗️ | 🛑 | onlyWhitelistAdd | | └ | removeWhitelistAddresses | Public ❗️ | 🛑 | onlyWhitelistRemove | | └ | addWhitelistAddress | Public ❗️ | 🛑 | onlyWhitelistAdd | | └ | removeWhitelistAddress | Public ❗️ | 🛑 | onlyWhitelistRemove | +| └ | addFrozenlistAddresses | Public ❗️ | 🛑 | onlyFrozenlistAdd | +| └ | removeFrozenlistAddresses | Public ❗️ | 🛑 | onlyFrozenlistRemove | +| └ | addFrozenlistAddress | Public ❗️ | 🛑 | onlyFrozenlistAdd | +| └ | removeFrozenlistAddress | Public ❗️ | 🛑 | onlyFrozenlistRemove | +| └ | transferred | Public ❗️ | |NO❗️ | +| └ | transferred | Public ❗️ | |NO❗️ | +| └ | canReturnTransferRestrictionCode | Public ❗️ | |NO❗️ | +| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | +| └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | whitelistAddressCount | Public ❗️ | |NO❗️ | | └ | isWhitelisted | Public ❗️ | |NO❗️ | | └ | whitelist | Public ❗️ | |NO❗️ | | └ | isVerified | Public ❗️ | |NO❗️ | | └ | areWhitelisted | Public ❗️ | |NO❗️ | -| └ | addFrozenlistAddresses | Public ❗️ | 🛑 | onlyFrozenlistAdd | -| └ | removeFrozenlistAddresses | Public ❗️ | 🛑 | onlyFrozenlistRemove | -| └ | addFrozenlistAddress | Public ❗️ | 🛑 | onlyFrozenlistAdd | -| └ | removeFrozenlistAddress | Public ❗️ | 🛑 | onlyFrozenlistRemove | | └ | frozenlistAddressCount | Public ❗️ | |NO❗️ | | └ | isFrozen | Public ❗️ | |NO❗️ | | └ | frozenlist | Public ❗️ | |NO❗️ | | └ | areFrozen | Public ❗️ | |NO❗️ | -| └ | supportsInterface | Public ❗️ | |NO❗️ | -| └ | _authorizeWhitelistAdd | Internal 🔒 | | | -| └ | _authorizeWhitelistRemove | Internal 🔒 | | | -| └ | _authorizeFrozenlistAdd | Internal 🔒 | | | -| └ | _authorizeFrozenlistRemove | Internal 🔒 | | | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | +| └ | _transferred | Internal 🔒 | | | +| └ | _transferredFrom | Internal 🔒 | | | | └ | _msgSender | Internal 🔒 | | | | └ | _msgData | Internal 🔒 | | | | └ | _contextSuffixLength | Internal 🔒 | | | diff --git a/doc/surya/surya_report/surya_report_RuleERC2980Internal.sol.md b/doc/surya/surya_report/surya_report_RuleERC2980Internal.sol.md index 4e8ea0e..7df0ae1 100644 --- a/doc/surya/surya_report/surya_report_RuleERC2980Internal.sol.md +++ b/doc/surya/surya_report/surya_report_RuleERC2980Internal.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol | c57c96a827baf067999c9568dd4e1e46f9443c60 | +| ./rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol | 084ab0430f52a08abdad8e38a4693255426a3058 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleERC2980InvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleERC2980InvariantStorage.sol.md index 35100ff..91125d6 100644 --- a/doc/surya/surya_report/surya_report_RuleERC2980InvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleERC2980InvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol | e297f0edb2cf9641ee0277f1baef6b838a61729c | +| ./rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol | 7f95583b45c40e1ba4f8197421ed9fa2187a971f | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleERC2980Ownable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleERC2980Ownable2Step.sol.md index 1656cc1..8a62e10 100644 --- a/doc/surya/surya_report/surya_report_RuleERC2980Ownable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleERC2980Ownable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleERC2980Ownable2Step.sol | b8d79b607fd79c889394e5aa708b36bc27f66af0 | +| ./rules/validation/deployment/RuleERC2980Ownable2Step.sol | 65d1a4469f2d80fda332499a277f75cfd96f07b3 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleIdentityRegistry.sol.md b/doc/surya/surya_report/surya_report_RuleIdentityRegistry.sol.md index 4d08de5..0ebfdb0 100644 --- a/doc/surya/surya_report/surya_report_RuleIdentityRegistry.sol.md +++ b/doc/surya/surya_report/surya_report_RuleIdentityRegistry.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleIdentityRegistry.sol | de9802c7f1246d3f8055b7e8236f31d2bf599ca6 | +| ./rules/validation/deployment/RuleIdentityRegistry.sol | f48fe73ef47e1f914fb6de05c2542913f5813817 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleIdentityRegistryBase.sol.md b/doc/surya/surya_report/surya_report_RuleIdentityRegistryBase.sol.md index d23f64e..c3c84c0 100644 --- a/doc/surya/surya_report/surya_report_RuleIdentityRegistryBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleIdentityRegistryBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleIdentityRegistryBase.sol | b45427318245e6f2c8a95e6703a841f5aa17b92e | +| ./rules/validation/abstract/base/RuleIdentityRegistryBase.sol | 3314d7f11202a0210238d55ad78d0ee67339aadf | ### Contracts Description Table @@ -17,17 +17,17 @@ |||||| | **RuleIdentityRegistryBase** | Implementation | RuleNFTAdapter, RuleIdentityRegistryInvariantStorage ||| | └ | | Public ❗️ | 🛑 |NO❗️ | +| └ | _authorizeIdentityRegistryManager | Internal 🔒 | | | +| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | | └ | setIdentityRegistry | Public ❗️ | 🛑 | onlyIdentityRegistryManager | | └ | clearIdentityRegistry | Public ❗️ | 🛑 | onlyIdentityRegistryManager | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | transferred | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | |NO❗️ | +| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _transferredFrom | Internal 🔒 | | | -| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | -| └ | _authorizeIdentityRegistryManager | Internal 🔒 | | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleIdentityRegistryInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleIdentityRegistryInvariantStorage.sol.md index 3045ea6..978372a 100644 --- a/doc/surya/surya_report/surya_report_RuleIdentityRegistryInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleIdentityRegistryInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol | 663984fafa1c5e4989ba9e16187cec3fec5bf9b4 | +| ./rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol | fcd7549f3bcfd95fb8b052a1c88a4a04672d8df1 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleIdentityRegistryOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleIdentityRegistryOwnable2Step.sol.md index 25a4367..5c2f7a8 100644 --- a/doc/surya/surya_report/surya_report_RuleIdentityRegistryOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleIdentityRegistryOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol | 26ebe6c18ab705170cdbf9911cbedabee353bf95 | +| ./rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol | f498c93b91bcdd36aa42817847953f3a308d51a6 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleMaxTotalSupply.sol.md b/doc/surya/surya_report/surya_report_RuleMaxTotalSupply.sol.md index ea3846f..e6e0d63 100644 --- a/doc/surya/surya_report/surya_report_RuleMaxTotalSupply.sol.md +++ b/doc/surya/surya_report/surya_report_RuleMaxTotalSupply.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleMaxTotalSupply.sol | 45cedeaa489c5bafb1047c7eae8fdb2c14e24e1c | +| ./rules/validation/deployment/RuleMaxTotalSupply.sol | 3880cdfe3de4b9ba850cb43e6310b2179329ce0d | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyBase.sol.md b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyBase.sol.md index 6782ba4..7c910e8 100644 --- a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol | d053ae9f319f818704986cd5e551422376088f75 | +| ./rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol | c61ef04957bfd41edd3c13a799831f882d64813d | ### Contracts Description Table @@ -17,17 +17,17 @@ |||||| | **RuleMaxTotalSupplyBase** | Implementation | RuleTransferValidation, RuleMaxTotalSupplyInvariantStorage ||| | └ | | Public ❗️ | 🛑 |NO❗️ | +| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | | └ | setMaxTotalSupply | Public ❗️ | 🛑 | onlyMaxTotalSupplyManager | | └ | setTokenContract | Public ❗️ | 🛑 | onlyMaxTotalSupplyManager | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | transferred | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | |NO❗️ | -| └ | _transferred | Internal 🔒 | | | -| └ | _transferredFrom | Internal 🔒 | | | -| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | | └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | | └ | _authorizeMaxTotalSupplyManager | Internal 🔒 | | | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | +| └ | _transferred | Internal 🔒 | | | +| └ | _transferredFrom | Internal 🔒 | | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyInvariantStorage.sol.md index c267fcf..7e06b94 100644 --- a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol | 9c921b3736a3f7f28b6b0681c2cf995a55fa9cc6 | +| ./rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol | bec7a27e5f4de88f379ab8440eb386ed0814773f | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyOwnable2Step.sol.md index e6f9fcd..2d964cc 100644 --- a/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleMaxTotalSupplyOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol | adb4d6c6580cf2aacf8fb5547aa9dd93d6e05430 | +| ./rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol | 6f8fc83269973f6497ca27721ae7b893cd6104e0 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleNFTAdapter.sol.md b/doc/surya/surya_report/surya_report_RuleNFTAdapter.sol.md index 08a6b2c..3f3a147 100644 --- a/doc/surya/surya_report/surya_report_RuleNFTAdapter.sol.md +++ b/doc/surya/surya_report/surya_report_RuleNFTAdapter.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/core/RuleNFTAdapter.sol | 3c6af34113014eb17564b992ee6af4b0f973b89a | +| ./rules/validation/abstract/core/RuleNFTAdapter.sol | b8f541d2d2891f8ef387c2830c86043dbc43ec19 | ### Contracts Description Table @@ -16,8 +16,6 @@ | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| | **RuleNFTAdapter** | Implementation | RuleTransferValidation, IERC7943NonFungibleComplianceExtend, ITransferContext ||| -| └ | _transferred | Internal 🔒 | 🛑 | | -| └ | _transferredFrom | Internal 🔒 | 🛑 | | | └ | detectTransferRestriction | Public ❗️ | |NO❗️ | | └ | detectTransferRestrictionFrom | Public ❗️ | |NO❗️ | | └ | canTransfer | Public ❗️ | |NO❗️ | @@ -26,6 +24,8 @@ | └ | transferred | Public ❗️ | 🛑 |NO❗️ | | └ | transferred | External ❗️ | 🛑 |NO❗️ | | └ | transferred | External ❗️ | 🛑 |NO❗️ | +| └ | _transferred | Internal 🔒 | 🛑 | | +| └ | _transferredFrom | Internal 🔒 | 🛑 | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleSanctionsList.sol.md b/doc/surya/surya_report/surya_report_RuleSanctionsList.sol.md index 2fbdb7e..8ebe7f2 100644 --- a/doc/surya/surya_report/surya_report_RuleSanctionsList.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSanctionsList.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleSanctionsList.sol | 6d463c0d660ea2517d9aa0f678d0d38bb0634a1b | +| ./rules/validation/deployment/RuleSanctionsList.sol | 8b9a8d5f53a59eccc4ac0204eeab3857cd8e18c4 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSanctionsListBase.sol.md b/doc/surya/surya_report/surya_report_RuleSanctionsListBase.sol.md index cc2b1c7..3a28118 100644 --- a/doc/surya/surya_report/surya_report_RuleSanctionsListBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSanctionsListBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleSanctionsListBase.sol | bdaa898898ea6ba654f2b627b3dd0161b3c39d39 | +| ./rules/validation/abstract/base/RuleSanctionsListBase.sol | c2e3984467b78f44467fceaeb9773a6dbd98ba83 | ### Contracts Description Table @@ -17,18 +17,18 @@ |||||| | **RuleSanctionsListBase** | Implementation | MetaTxModuleStandalone, RuleNFTAdapter, RuleSanctionsListInvariantStorage ||| | └ | | Public ❗️ | 🛑 | MetaTxModuleStandalone | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | | └ | setSanctionListOracle | Public ❗️ | 🛑 | onlySanctionListManager | | └ | clearSanctionListOracle | Public ❗️ | 🛑 | onlySanctionListManager | | └ | transferred | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | |NO❗️ | +| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | +| └ | _authorizeSanctionListManager | Internal 🔒 | | | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _transferredFrom | Internal 🔒 | | | | └ | _setSanctionListOracle | Internal 🔒 | 🛑 | | -| └ | _authorizeSanctionListManager | Internal 🔒 | | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleSanctionsListInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleSanctionsListInvariantStorage.sol.md index bd47a88..7df4574 100644 --- a/doc/surya/surya_report/surya_report_RuleSanctionsListInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSanctionsListInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol | 0b799d5753392482f00fea8d5a885847747d6360 | +| ./rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol | 3d359490f48dcb20ee80dd25fe05aa9d447283b4 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2Step.sol.md index f491457..2ad4f13 100644 --- a/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleSanctionsListOwnable2Step.sol | ab32806c8989f946fb487bb3db318b49c5c265d4 | +| ./rules/validation/deployment/RuleSanctionsListOwnable2Step.sol | 8e57be4539873118b38e561331a5daa212bc68f3 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2StepHarness.sol.md b/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2StepHarness.sol.md index 1da0028..2cc62e1 100644 --- a/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2StepHarness.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSanctionsListOwnable2StepHarness.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/harness/RuleSanctionsListOwnable2StepHarness.sol | 44292571fdcfc1cd2bcaa78849bd355b11c0b391 | +| ./mocks/harness/RuleSanctionsListOwnable2StepHarness.sol | 4ef2243400087a7fe3e72d38fd5f2c2bb160ee1d | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSpenderWhitelist.sol.md b/doc/surya/surya_report/surya_report_RuleSpenderWhitelist.sol.md index 057a7f0..c7b1288 100644 --- a/doc/surya/surya_report/surya_report_RuleSpenderWhitelist.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSpenderWhitelist.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleSpenderWhitelist.sol | a0be674edf4d466f3359f0d8b9cf5e928356d27b | +| ./rules/validation/deployment/RuleSpenderWhitelist.sol | fd6fa68104586756ba54f27a4ba950be852368ef | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistBase.sol.md b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistBase.sol.md index 692fb0b..6c40c5f 100644 --- a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleSpenderWhitelistBase.sol | 5c98b6381ca5afb108537c1e8691793f622098ee | +| ./rules/validation/abstract/base/RuleSpenderWhitelistBase.sol | 4dcfe0d0236ac5c0a1773ae39504f384433ad4c9 | ### Contracts Description Table @@ -17,12 +17,12 @@ |||||| | **RuleSpenderWhitelistBase** | Implementation | RuleAddressSet, RuleNFTAdapter, RuleSpenderWhitelistInvariantStorage ||| | └ | | Public ❗️ | 🛑 | RuleAddressSet | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | |NO❗️ | | └ | transferred | Public ❗️ | |NO❗️ | +| └ | messageForTransferRestriction | Public ❗️ | |NO❗️ | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _transferredFrom | Internal 🔒 | | | diff --git a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistHarnesses.sol.md b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistHarnesses.sol.md index 7a787a4..2ec69c4 100644 --- a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistHarnesses.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistHarnesses.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/harness/RuleSpenderWhitelistHarnesses.sol | 0ffebe781ed82e1a573c0b78dad7051f9c10cd69 | +| ./mocks/harness/RuleSpenderWhitelistHarnesses.sol | 2a35f957537cc77ebb9d88c1270c0c4a0ab6ab6d | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistOwnable2Step.sol.md index a0f1499..8ab7606 100644 --- a/doc/surya/surya_report/surya_report_RuleSpenderWhitelistOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleSpenderWhitelistOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol | ab6f45280b6ae2420fae79d04ee7092a6e22d2e6 | +| ./rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol | 3a1a7f3c6cc386f57c7479adf4c1b5d13854a37e | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleTransferValidation.sol.md b/doc/surya/surya_report/surya_report_RuleTransferValidation.sol.md index 39097a2..db49896 100644 --- a/doc/surya/surya_report/surya_report_RuleTransferValidation.sol.md +++ b/doc/surya/surya_report/surya_report_RuleTransferValidation.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/core/RuleTransferValidation.sol | 60cacb209f7dd69907e0319ecd359140eeb3a204 | +| ./rules/validation/abstract/core/RuleTransferValidation.sol | 2506b3a85578946fbff945a869252061a98672b2 | ### Contracts Description Table @@ -16,13 +16,13 @@ | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| | **RuleTransferValidation** | Implementation | VersionModule, IERC1404Extend, IERC3643ComplianceRead, IERC7551Compliance, IRule ||| -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | detectTransferRestriction | Public ❗️ | |NO❗️ | | └ | detectTransferRestrictionFrom | Public ❗️ | |NO❗️ | | └ | canTransfer | Public ❗️ | |NO❗️ | | └ | canTransferFrom | Public ❗️ | |NO❗️ | | └ | supportsInterface | Public ❗️ | |NO❗️ | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleValidateTransfer.sol.md b/doc/surya/surya_report/surya_report_RuleValidateTransfer.sol.md deleted file mode 100644 index 533f5bf..0000000 --- a/doc/surya/surya_report/surya_report_RuleValidateTransfer.sol.md +++ /dev/null @@ -1,33 +0,0 @@ -## Sūrya's Description Report - -### Files Description Table - - -| File Name | SHA-1 Hash | -|-------------|--------------| -| ./rules/validation/abstract/RuleValidateTransfer.sol | 18be5a422df4cfea746702e500d9399b3edd5f68 | - - -### Contracts Description Table - - -| Contract | Type | Bases | | | -|:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| -| └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | -|||||| -| **RuleValidateTransfer** | Implementation | IERC1404Extend, IERC3643ComplianceRead, IERC7551Compliance, IRule ||| -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | -| └ | detectTransferRestriction | Public ❗️ | |NO❗️ | -| └ | detectTransferRestrictionFrom | Public ❗️ | |NO❗️ | -| └ | canTransfer | Public ❗️ | |NO❗️ | -| └ | canTransferFrom | Public ❗️ | |NO❗️ | -| └ | supportsInterface | Public ❗️ | |NO❗️ | - - -### Legend - -| Symbol | Meaning | -|:--------:|-----------| -| 🛑 | Function can modify state | -| 💵 | Function is payable | diff --git a/doc/surya/surya_report/surya_report_RuleWhitelist.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelist.sol.md index 1d32e17..f31100a 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelist.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelist.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleWhitelist.sol | 51776b16b0583a57947a6fb2e1f4f5862bf491d0 | +| ./rules/validation/deployment/RuleWhitelist.sol | 28719efcbd53f0d16152ede604d78ed0a05a7ae6 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistBase.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistBase.sol.md index 7caef73..1718595 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleWhitelistBase.sol | c294dd72e48d0a71699d3b54c560e1e5c23d52da | +| ./rules/validation/abstract/base/RuleWhitelistBase.sol | 3dc6bbac3c9d6bbbb012578f4d0ecd1fd790f44c | ### Contracts Description Table @@ -17,13 +17,13 @@ |||||| | **RuleWhitelistBase** | Implementation | RuleAddressSet, RuleWhitelistShared, IIdentityRegistryVerified ||| | └ | | Public ❗️ | 🛑 | RuleAddressSet | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | -| └ | isVerified | Public ❗️ | |NO❗️ | | └ | setCheckSpender | Public ❗️ | 🛑 | onlyCheckSpenderManager | -| └ | _setCheckSpender | Internal 🔒 | 🛑 | | +| └ | isVerified | Public ❗️ | |NO❗️ | | └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | _authorizeCheckSpenderManager | Internal 🔒 | | | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | +| └ | _setCheckSpender | Internal 🔒 | 🛑 | | ### Legend diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistCommon.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistCommon.sol.md deleted file mode 100644 index bfd555b..0000000 --- a/doc/surya/surya_report/surya_report_RuleWhitelistCommon.sol.md +++ /dev/null @@ -1,32 +0,0 @@ -## Sūrya's Description Report - -### Files Description Table - - -| File Name | SHA-1 Hash | -|-------------|--------------| -| ./rules/validation/abstract/RuleWhitelistCommon.sol | 89eb3e8385ca0e5b6c49266da7b26229915e3e3c | - - -### Contracts Description Table - - -| Contract | Type | Bases | | | -|:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| -| └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | -|||||| -| **RuleWhitelistCommon** | Implementation | RuleNFTAdapter, RuleWhitelistInvariantStorage ||| -| └ | canReturnTransferRestrictionCode | External ❗️ | |NO❗️ | -| └ | messageForTransferRestriction | External ❗️ | |NO❗️ | -| └ | transferred | Public ❗️ | |NO❗️ | -| └ | transferred | Public ❗️ | |NO❗️ | -| └ | _transferred | Internal 🔒 | | | -| └ | _transferredFrom | Internal 🔒 | | | - - -### Legend - -| Symbol | Meaning | -|:--------:|-----------| -| 🛑 | Function can modify state | -| 💵 | Function is payable | diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistInvariantStorage.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistInvariantStorage.sol.md index f96edac..a246ab5 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistInvariantStorage.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistInvariantStorage.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol | 3f3d8473cd932de92f68cbbee4ce822d622719a3 | +| ./rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol | 6c2af6b4853b757d90cd675e7c9d3ed90522959f | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistOwnable.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistOwnable.sol.md deleted file mode 100644 index cf69f57..0000000 --- a/doc/surya/surya_report/surya_report_RuleWhitelistOwnable.sol.md +++ /dev/null @@ -1,33 +0,0 @@ -## Sūrya's Description Report - -### Files Description Table - - -| File Name | SHA-1 Hash | -|-------------|--------------| -| ./rules/validation/RuleWhitelistOwnable.sol | 51f28c83fb3c795b4e468d59e1573a6cb51b8205 | - - -### Contracts Description Table - - -| Contract | Type | Bases | | | -|:----------:|:-------------------:|:----------------:|:----------------:|:---------------:| -| └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | -|||||| -| **RuleWhitelistOwnable** | Implementation | RuleWhitelistBase, Ownable2Step ||| -| └ | | Public ❗️ | 🛑 | RuleWhitelistBase Ownable | -| └ | _authorizeAddressListAdd | Internal 🔒 | | | -| └ | _authorizeAddressListRemove | Internal 🔒 | | | -| └ | _authorizeCheckSpenderManager | Internal 🔒 | | | -| └ | _msgSender | Internal 🔒 | | | -| └ | _msgData | Internal 🔒 | | | -| └ | _contextSuffixLength | Internal 🔒 | | | - - -### Legend - -| Symbol | Meaning | -|:--------:|-----------| -| 🛑 | Function can modify state | -| 💵 | Function is payable | diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistOwnable2Step.sol.md index 6fff887..346c5a3 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleWhitelistOwnable2Step.sol | 3a8dd7feb518ccdd933216b4c5b10cf09c92869f | +| ./rules/validation/deployment/RuleWhitelistOwnable2Step.sol | a8f5ed118679dd2e32abc7e51cd7e9c165879376 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistShared.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistShared.sol.md index f0fc863..25d1139 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistShared.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistShared.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/core/RuleWhitelistShared.sol | 32ad86781e49207c99a45a2866f1bd76fff3c1f0 | +| ./rules/validation/abstract/core/RuleWhitelistShared.sol | b65096ed397e2a1c3506236a481824da43a4de35 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistWrapper.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistWrapper.sol.md index 1fa327b..92397aa 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistWrapper.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistWrapper.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleWhitelistWrapper.sol | b3a545c03fcd77815fe7ed2675827303ecc734d3 | +| ./rules/validation/deployment/RuleWhitelistWrapper.sol | 3294eb2b561b5055686ff1eb82b1f88494d1d9c6 | ### Contracts Description Table @@ -18,12 +18,12 @@ | **RuleWhitelistWrapper** | Implementation | RuleWhitelistWrapperBase, AccessControlModuleStandalone ||| | └ | | Public ❗️ | 🛑 | RuleWhitelistWrapperBase AccessControlModuleStandalone | | └ | hasRole | Public ❗️ | |NO❗️ | +| └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | _authorizeCheckSpenderManager | Internal 🔒 | 🛑 | onlyRole | | └ | _onlyRulesManager | Internal 🔒 | 🛑 | onlyRole | | └ | _msgSender | Internal 🔒 | | | | └ | _msgData | Internal 🔒 | | | | └ | _contextSuffixLength | Internal 🔒 | | | -| └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | _grantRole | Internal 🔒 | 🛑 | | | └ | _revokeRole | Internal 🔒 | 🛑 | | diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperBase.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperBase.sol.md index a704d91..948fa65 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperBase.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperBase.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/abstract/base/RuleWhitelistWrapperBase.sol | b7d69ae4c5ff3d95b75a3c86e104a1deaf1fb834 | +| ./rules/validation/abstract/base/RuleWhitelistWrapperBase.sol | ae2d97261413a3a126dde152a60bef8627ad1299 | ### Contracts Description Table @@ -17,16 +17,16 @@ |||||| | **RuleWhitelistWrapperBase** | Implementation | RulesManagementModule, MetaTxModuleStandalone, RuleWhitelistShared, IIdentityRegistryVerified ||| | └ | | Public ❗️ | 🛑 | MetaTxModuleStandalone | -| └ | _detectTransferRestriction | Internal 🔒 | | | -| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | +| └ | _authorizeCheckSpenderManager | Internal 🔒 | 🛑 | | +| └ | setCheckSpender | Public ❗️ | 🛑 | onlyCheckSpenderManager | | └ | supportsInterface | Public ❗️ | |NO❗️ | | └ | isVerified | Public ❗️ | |NO❗️ | -| └ | setCheckSpender | Public ❗️ | 🛑 | onlyCheckSpenderManager | +| └ | _detectTransferRestriction | Internal 🔒 | | | +| └ | _detectTransferRestrictionFrom | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _transferred | Internal 🔒 | | | | └ | _detectTransferRestrictionForTargets | Internal 🔒 | | | | └ | _setCheckSpender | Internal 🔒 | 🛑 | | -| └ | _authorizeCheckSpenderManager | Internal 🔒 | 🛑 | | | └ | _msgSender | Internal 🔒 | | | | └ | _msgData | Internal 🔒 | | | | └ | _contextSuffixLength | Internal 🔒 | | | diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperHarnessInternal.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperHarnessInternal.sol.md index bb09dc6..9cc84d0 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperHarnessInternal.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperHarnessInternal.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/harness/RuleWhitelistWrapperHarnessInternal.sol | 9b23d0a69ee6fd159072911d447c37fe54e42610 | +| ./mocks/harness/RuleWhitelistWrapperHarnessInternal.sol | 3d8369bf0e3f3ad66c4732df955b00491a2d83c4 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperOwnable2Step.sol.md b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperOwnable2Step.sol.md index c4d00e7..352de2c 100644 --- a/doc/surya/surya_report/surya_report_RuleWhitelistWrapperOwnable2Step.sol.md +++ b/doc/surya/surya_report/surya_report_RuleWhitelistWrapperOwnable2Step.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol | ddd7eb760481cd54f2fad6b3665c93e460ba61e6 | +| ./rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol | 5ec7ee305486a7edfdc2dc045d717fc8ecb2b577 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_SanctionListOracle.sol.md b/doc/surya/surya_report/surya_report_SanctionListOracle.sol.md index a167801..e08c8c8 100644 --- a/doc/surya/surya_report/surya_report_SanctionListOracle.sol.md +++ b/doc/surya/surya_report/surya_report_SanctionListOracle.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/SanctionListOracle.sol | c3ba0148abb353bd935ec7c914c7e3c28e245a2f | +| ./mocks/SanctionListOracle.sol | 01c0c904f32a647b4e851d03b6ca2947ed119bd0 | ### Contracts Description Table diff --git a/doc/surya/surya_report/surya_report_TotalSupplyMock.sol.md b/doc/surya/surya_report/surya_report_TotalSupplyMock.sol.md index 678f202..9892948 100644 --- a/doc/surya/surya_report/surya_report_TotalSupplyMock.sol.md +++ b/doc/surya/surya_report/surya_report_TotalSupplyMock.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./mocks/TotalSupplyMock.sol | 200ea8b14c36b646b38d1487be97223685750a0f | +| ./mocks/TotalSupplyMock.sol | 6c950ae26666c8693a87d9c66ea2a87107d03dd1 | ### Contracts Description Table @@ -16,8 +16,8 @@ | └ | **Function Name** | **Visibility** | **Mutability** | **Modifiers** | |||||| | **TotalSupplyMock** | Implementation | ||| -| └ | totalSupply | External ❗️ | |NO❗️ | | └ | setTotalSupply | External ❗️ | 🛑 |NO❗️ | +| └ | totalSupply | External ❗️ | |NO❗️ | ### Legend diff --git a/doc/surya/surya_report/surya_report_VersionModule.sol.md b/doc/surya/surya_report/surya_report_VersionModule.sol.md index 761b851..e3a4204 100644 --- a/doc/surya/surya_report/surya_report_VersionModule.sol.md +++ b/doc/surya/surya_report/surya_report_VersionModule.sol.md @@ -5,7 +5,7 @@ | File Name | SHA-1 Hash | |-------------|--------------| -| ./modules/VersionModule.sol | 03d5ba27a122523661971f71f82b53ba3c1d52f2 | +| ./modules/VersionModule.sol | 419acdca74542295a72abbf1fd6c29fdfbfe4f70 | ### Contracts Description Table diff --git a/doc/technical/RuleConditionalTransferLight.md b/doc/technical/RuleConditionalTransferLight.md index 2d1c17f..2c338b2 100644 --- a/doc/technical/RuleConditionalTransferLight.md +++ b/doc/technical/RuleConditionalTransferLight.md @@ -45,9 +45,9 @@ Increments the approval count for the `(from, to, value)` hash by 1. Restricted Decrements the approval count for the `(from, to, value)` hash by 1. Reverts if no approval exists. Restricted to `OPERATOR_ROLE`. Emits `TransferApprovalCancelled`. -### `approveAndTransferIfAllowed(address token, address from, address to, uint256 value) → bool` +### `approveAndTransferIfAllowed(address from, address to, uint256 value) → bool` -Approves the transfer and immediately calls `IERC20(token).transferFrom(from, to, value)` using this rule contract as the spender. Requires `from` to have previously approved this contract for at least `value` tokens. Restricted to `OPERATOR_ROLE`. +Approves the transfer and immediately calls `SafeERC20.safeTransferFrom` on the currently bound token, using this rule contract as the spender. Requires `from` to have previously approved this contract for at least `value` tokens. Restricted to `OPERATOR_ROLE`. ### `approvedCount(address from, address to, uint256 value) → uint256` diff --git a/doc/technical/RuleERC2980.md b/doc/technical/RuleERC2980.md index 8ab7409..4bf1ffb 100644 --- a/doc/technical/RuleERC2980.md +++ b/doc/technical/RuleERC2980.md @@ -37,6 +37,14 @@ This rule implements the [ERC-2980](https://eips.ethereum.org/EIPS/eip-2980) Swi | `FROZENLIST_ADD_ROLE` | May add addresses to the frozenlist | | `FROZENLIST_REMOVE_ROLE` | May remove addresses from the frozenlist | +## Constructor burn configuration + +- `RuleERC2980(address admin, address forwarderIrrevocable, bool allowBurn)` +- `RuleERC2980Ownable2Step(address owner, address forwarderIrrevocable, bool allowBurn)` + +If `allowBurn` is `true`, the constructor whitelists `address(0)` so burn/redemption transfers to `address(0)` are allowed. +If `allowBurn` is `false`, `address(0)` is not whitelisted by default and burn/redemption transfers revert with `CODE_ADDRESS_TO_NOT_WHITELISTED` (`63`). + ## Whitelist methods diff --git a/doc/technical/RuleWhitelist.md b/doc/technical/RuleWhitelist.md index 28e0770..7f0bfd4 100644 --- a/doc/technical/RuleWhitelist.md +++ b/doc/technical/RuleWhitelist.md @@ -13,6 +13,7 @@ This rule restricts transfers so that only whitelisted addresses may send and re | `admin` | Address granted `DEFAULT_ADMIN_ROLE` (implicitly holds all roles) | | `forwarderIrrevocable` | ERC-2771 trusted forwarder address for meta-transactions (use `address(0)` to disable) | | `checkSpender_` | If `true`, `transferFrom` spender address is also verified against the whitelist | +| `allowMintBurn` | If `true`, pre-lists `address(0)` at deployment to allow mint/burn flows without a post-deploy `addAddress(address(0))` call | ### `checkSpender` flag @@ -81,7 +82,7 @@ Enables or disables spender checks for `transferFrom`. Restricted to `DEFAULT_AD ### Zero address -The zero address (`address(0)`) may be added to the whitelist. This is required by CMTAT to allow minting (mints are `transfer(address(0), to, value)`). OpenZeppelin prevents actual ERC-20 transfers to or from the zero address, so this does not create a security issue. +The zero address (`address(0)`) may be added to the whitelist. This is required by CMTAT to allow minting (mints are `transfer(address(0), to, value)`) and burning (`to == address(0)`). You can either set `allowMintBurn=true` in the constructor to pre-list `address(0)`, or add it later with `addAddress(address(0))`. OpenZeppelin prevents actual ERC-20 transfers to or from the zero address, so this does not create a security issue. ### Batch vs single operations diff --git a/hardhat.config.js b/hardhat.config.js index 35d92be..38cd154 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,12 +1,15 @@ /** @type import('hardhat/config').HardhatUserConfig */ +require("@nomicfoundation/hardhat-toolbox"); require("@nomicfoundation/hardhat-foundry"); module.exports = { - solidity: "0.8.34", - settings: { - optimizer: { - enabled: true, - runs: 200 - }, - evmVersion:"prague" + solidity: { + version: "0.8.34", + settings: { + optimizer: { + enabled: true, + runs: 200 + }, + evmVersion: "prague" + } } }; diff --git a/lib/RuleEngine b/lib/RuleEngine index f3e27c1..ec4a24a 160000 --- a/lib/RuleEngine +++ b/lib/RuleEngine @@ -1 +1 @@ -Subproject commit f3e27c190635e91a64215276f4757d65eb2d2b2c +Subproject commit ec4a24a96ca30e2ef8f79a06e49846a431e9b4b1 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts index 56a3de2..5fd1781 160000 --- a/lib/openzeppelin-contracts +++ b/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 56a3de2cea907c9a500d32e70c275f68393b7ba6 +Subproject commit 5fd1781b1454fd1ef8e722282f86f9293cacf256 diff --git a/lib/openzeppelin-contracts-upgradeable b/lib/openzeppelin-contracts-upgradeable index c9f48f0..7bf4727 160000 --- a/lib/openzeppelin-contracts-upgradeable +++ b/lib/openzeppelin-contracts-upgradeable @@ -1 +1 @@ -Subproject commit c9f48f0d6c470a3edab20dcbb3cc35dcfc7f4f1f +Subproject commit 7bf4727aacdbfaa0f36cbd664654d0c9e1dc52bf diff --git a/package-lock.json b/package-lock.json index 422534e..94696cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,228 +4,188 @@ "requires": true, "packages": { "": { + "name": "Rules", "devDependencies": { - "@nomicfoundation/hardhat-foundry": "^1.0.1", + "@nomicfoundation/hardhat-foundry": "^1.2.1", + "@nomicfoundation/hardhat-toolbox": "^6.1.2", + "hardhat": "^2.28.6", "sol2uml": "^2.5.20", "surya": "^0.4.6" } }, + "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, + "license": "MIT" + }, "node_modules/@aduh95/viz.js": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", "dev": true }, - "node_modules/@chainsafe/as-sha256": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", - "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", - "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "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, "peer": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1" + "engines": { + "node": ">=0.1.90" } }, - "node_modules/@chainsafe/ssz": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", - "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "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", "peer": true, "dependencies": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.4.2", - "case": "^1.6.3" + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" } }, - "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==", + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", "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/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" + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" } }, - "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==", + "node_modules/@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", "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": "MPL-2.0", "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" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" + }, + "engines": { + "node": ">=18" } }, - "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==", + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "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/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "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/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@ethereumjs/util/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "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/bytes": "^5.7.0" + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "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" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "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", - "bn.js": "^5.2.1" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "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/logger": "^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/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "dev": true, "funding": [ { @@ -237,14 +197,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/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==", + "node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "dev": true, "funding": [ { @@ -256,23 +225,21 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "dev": true, "funding": [ { @@ -284,22 +251,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "dev": true, "funding": [ { @@ -311,25 +275,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@ethersproject/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==", + "node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "dev": true, "funding": [ { @@ -341,26 +299,15 @@ "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" + "@ethersproject/bytes": "^5.8.0" } }, - "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==", + "node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "dev": true, "funding": [ { @@ -372,15 +319,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "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==", + "node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "dev": true, "funding": [ { @@ -391,12 +340,16 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ] + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "dev": true, "funding": [ { @@ -408,14 +361,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "dev": true, "funding": [ { @@ -427,15 +381,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "dev": true, "funding": [ { @@ -447,14 +409,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "dev": true, "funding": [ { @@ -466,33 +430,12 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "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" - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "dev": true, "funding": [ { @@ -504,15 +447,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "dev": true, "funding": [ { @@ -524,15 +467,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", "dev": true, "funding": [ { @@ -544,16 +487,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "dev": true, "funding": [ { @@ -565,43 +508,20 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", - "elliptic": "6.5.4", + "elliptic": "6.6.1", "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "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/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/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", "dev": true, "funding": [ { @@ -613,16 +533,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "dev": true, "funding": [ { @@ -634,22 +555,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", "dev": true, "funding": [ { @@ -661,16 +583,18 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "dev": true, "funding": [ { @@ -682,915 +606,851 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "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, - "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/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "license": "MIT", + "engines": { + "node": ">=14" } }, - "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==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "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": "ISC", + "peer": true, "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" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "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==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "peer": true, - "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" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "peer": true }, - "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/" - } - ], - "peer": true - }, - "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", - "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-block/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==", - "dev": true, - "peer": true, - "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": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", - "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-ethash": "3.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/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==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "peer": true, "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" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/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==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "yallist": "^3.0.2" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", - "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "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", "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.1", - "crc-32": "^1.2.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", - "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, "engines": { - "node": ">=14" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nomicfoundation/ethereumjs-ethash/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==", + "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, - "peer": true, + "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" + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", - "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "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, - "peer": true, - "dependencies": { - "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nomicfoundation/ethereumjs-evm/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==", + "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, - "peer": true, - "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" - } + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", - "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "peer": true, - "bin": { - "rlp": "bin/rlp" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=14" + "node": ">= 8" } }, - "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", - "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1", - "js-sdsl": "^4.1.4" + "engines": { + "node": ">= 8" } }, - "node_modules/@nomicfoundation/ethereumjs-statemanager/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==", + "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==", "dev": true, + "license": "MIT", "peer": true, "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" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", - "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "node_modules/@nomicfoundation/edr": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@types/readable-stream": "^2.3.13", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" }, "engines": { - "node": ">=14" + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-trie/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==", + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", "dev": true, - "peer": true, - "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" + "license": "MIT", + "engines": { + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-trie/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==", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", - "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", "dev": true, - "peer": true, - "dependencies": { - "@chainsafe/ssz": "^0.9.2", - "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3" - }, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-tx/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==", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", "dev": true, - "peer": true, - "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" + "license": "MIT", + "engines": { + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", - "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", "dev": true, - "peer": true, - "dependencies": { - "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "ethereum-cryptography": "0.1.3" - }, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", - "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", "dev": true, - "peer": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1" + "license": "MIT", + "engines": { + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", - "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", "dev": true, - "peer": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.5.0" + "license": "MIT", + "engines": { + "node": ">= 20" } }, - "node_modules/@nomicfoundation/ethereumjs-util/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==", + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", + "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", "dev": true, + "license": "MIT", "peer": true, "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" + "@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.1.0", + "chai": "^4.2.0", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", - "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" }, - "engines": { - "node": ">=14" + "peerDependencies": { + "ethers": "^6.14.0", + "hardhat": "^2.28.0" } }, - "node_modules/@nomicfoundation/ethereumjs-vm/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==", + "node_modules/@nomicfoundation/hardhat-foundry": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.2.1.tgz", + "integrity": "sha512-pH1KeyI0sysgi7I7uQKPLXWl895EkuS6V41rSi820Ipqp/FScIwDh27RbevgC9zJ4ufSsSz34njm9cvRMGMNVA==", "dev": true, - "peer": true, + "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" + "picocolors": "^1.1.0" + }, + "peerDependencies": { + "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/hardhat-foundry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.1.tgz", - "integrity": "sha512-sQEaX3rik6Gclmek4MqCyOc9+vOM0ZS40eUARrB6K9t6wthqCwJ29CClfxLdbrjn/3MM5hX8ioD+/9OqdGVxSQ==", + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", + "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "chalk": "^2.4.2" + "@nomicfoundation/ignition-core": "^0.15.15", + "@nomicfoundation/ignition-ui": "^0.15.13", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" }, "peerDependencies": { - "hardhat": "^2.12.6" + "@nomicfoundation/hardhat-verify": "^2.1.0", + "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/hardhat-foundry/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/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", + "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.1.0", + "@nomicfoundation/hardhat-ignition": "^0.15.16", + "@nomicfoundation/ignition-core": "^0.15.15", + "ethers": "^6.14.0", + "hardhat": "^2.26.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "ethereumjs-util": "^7.1.4" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/hardhat-foundry/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/@nomicfoundation/hardhat-toolbox": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-6.1.2.tgz", + "integrity": "sha512-xKL2r43GC/UIcQzmtFSmj3L4KqLSQ4fK+kyUw0vbIp94nV+9o2ZkI1s3znB8EKXqitt9ClXo0qcKj9RKOFjqPQ==", "dev": true, + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.1.0", + "@nomicfoundation/hardhat-ethers": "^3.1.3", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.14", + "@nomicfoundation/hardhat-network-helpers": "^1.1.0", + "@nomicfoundation/hardhat-verify": "^2.1.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=20.0.0", + "chai": "^4.2.0", + "ethers": "^6.14.0", + "hardhat": "^2.28.0", + "hardhat-gas-reporter": "^2.3.0", + "solidity-coverage": "^0.8.17", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "hardhat": "^2.26.0" } }, - "node_modules/@nomicfoundation/hardhat-foundry/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/@nomicfoundation/ignition-core": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", + "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "color-name": "1.1.3" + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.14.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" } }, - "node_modules/@nomicfoundation/hardhat-foundry/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 - }, - "node_modules/@nomicfoundation/hardhat-foundry/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==", + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, - "engines": { - "node": ">=4" + "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/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "node_modules/@nomicfoundation/hardhat-foundry/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/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "nofilter": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=16" } }, + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", + "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", + "dev": true, + "license": "MIT", + "peer": true + }, "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, - "peer": 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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], - "peer": true, "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" - ], - "peer": true, - "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "freebsd" - ], - "peer": true, "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "peer": true, "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "peer": true, "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "peer": true, "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", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "peer": true, "engines": { - "node": ">= 10" + "node": ">= 12" } }, - "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" - ], + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { - "node": ">= 10" + "node": ">= 12" } }, - "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" - ], + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ], "peer": true, "engines": { - "node": ">= 10" + "node": ">=14" } }, - "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" - ], + "node_modules/@puppeteer/browsers": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, "engines": { - "node": ">= 10" + "node": ">=18" } }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "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==", + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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==", + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "dev": true, + "license": "MIT", "peer": true, "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" + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { "node": ">=6" } }, + "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, + "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, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -1600,12 +1460,19 @@ "node": ">=6" } }, + "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, + "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, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -1615,12 +1482,19 @@ "node": ">=6" } }, + "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, + "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, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -1636,12 +1510,19 @@ "node": ">=6" } }, + "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, + "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, - "peer": true, + "license": "MIT", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -1653,12 +1534,19 @@ "node": ">=6" } }, + "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, + "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, - "peer": true, + "license": "BSD-3-Clause", "engines": { "node": ">=6" } @@ -1668,7 +1556,7 @@ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -1677,25 +1565,140 @@ "node": ">=6" } }, + "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, + "license": "0BSD" + }, "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==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, + "license": "MIT", + "peer": true + }, + "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, + "license": "MIT", + "peer": true + }, + "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, + "license": "MIT", + "peer": true + }, + "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, + "license": "MIT", + "peer": 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", + "peer": true, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "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", + "peer": true, + "dependencies": { + "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/@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", + "peer": 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/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "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": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -1705,11 +1708,32 @@ "@types/ms": "*" } }, - "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==", + "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", + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "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, + "license": "MIT", + "peer": true + }, + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/ms": { @@ -1719,131 +1743,113 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } }, "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "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, - "peer": true, - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } + "license": "MIT", + "peer": true }, "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" + "funding": { + "url": "https://github.com/sponsors/wevm" }, - "engines": { - "node": ">=6.5" + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3.22.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/abstract-level/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/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "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", "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/abstract-level/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "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" - } - ], - "peer": true, + "acorn": "^8.11.0" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, "node_modules/adm-zip": { @@ -1851,16 +1857,17 @@ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.3.0" } }, "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 + "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, + "license": "MIT" }, "node_modules/agent-base": { "version": "6.0.2", @@ -1879,7 +1886,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1888,12 +1895,52 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "peer": true, + "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/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "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==", + "dev": true, + "license": "ISC", + "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==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1903,7 +1950,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -1915,12 +1962,13 @@ } }, "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==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -1942,30 +1990,147 @@ "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 + "dev": true, + "license": "BSD-3-Clause" + }, + "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, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT", + "peer": true }, "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, - "peer": true + "license": "Python-2.0" }, - "node_modules/asynckit": { + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">= 4.0.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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/axios-debug-log": { @@ -1981,81 +2146,156 @@ "axios": ">=1.0.0" } }, + "node_modules/b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "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==", + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, - "peer": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "safe-buffer": "^5.0.1" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, - "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/bare-os": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz", + "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", + "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "bare-buffer": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "bare-events": { + "optional": true } - ] + } }, - "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/bare-url": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz", + "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } }, - "node_modules/bigint-crypto-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", - "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", + "node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=14.0.0" + "dependencies": { + "safe-buffer": "^5.0.1" } }, - "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/basic-ftp": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz", + "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==", "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/blakejs": { @@ -2063,53 +2303,122 @@ "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "ISC" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "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/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "node_modules/browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "node_modules/brotli-wasm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brotli-wasm/-/brotli-wasm-2.0.1.tgz", + "integrity": "sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww==", "dev": true, - "peer": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } + "license": "Apache-2.0", + "peer": true + }, + "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, + "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "buffer-xor": "^1.0.3", @@ -2125,6 +2434,7 @@ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "base-x": "^3.0.2" @@ -2135,6 +2445,7 @@ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "bs58": "^4.0.0", @@ -2142,35 +2453,12 @@ "safe-buffer": "^5.1.2" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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.1.13" - } - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -2180,34 +2468,22 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "peer": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2219,55 +2495,122 @@ "dev": true }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "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/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "license": "WTFPL", + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "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, + "dependencies": { + "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { @@ -2277,22 +2620,52 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", "dev": true, + "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=20.18.1" }, "funding": { "url": "https://github.com/cheeriojs/cheerio?sponsor=1" @@ -2303,6 +2676,7 @@ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -2315,66 +2689,123 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "node_modules/cheerio/node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true, - "peer": true + "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==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/classic-level": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "peer": true, "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "^2.2.2", - "node-gyp-build": "^4.3.0" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { - "node": ">=12" + "node": ">= 0.10" } }, + "node_modules/cipher-base/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==", + "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", + "peer": true + }, "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, - "peer": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", "dev": true, + "license": "ISC", "dependencies": { "d": "^1.0.1", - "es5-ext": "^0.10.61", + "es5-ext": "^0.10.64", "es6-iterator": "^2.0.3", "memoizee": "^0.4.15", "timers-ext": "^0.1.7" @@ -2383,24 +2814,36 @@ "node": ">=0.10" } }, - "node_modules/cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, "node_modules/color-convert": { @@ -2447,18 +2890,170 @@ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true, + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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/command-line-usage/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", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/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", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/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", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/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, + "license": "MIT", "peer": true }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/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", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/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", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/convert-svg-core": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", - "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.7.1.tgz", + "integrity": "sha512-qlQlT2pHMCG0NmZsh2yuYNYO9zKbOmHoWPT+ibuvpVjvA7l9aNhHS4debQeZGuR0mA4x/0a38zOTqBkkdYoTXQ==", "dev": true, "funding": [ { @@ -2470,36 +3065,21 @@ "url": "https://www.patreon.com/neocotic" } ], + "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.11", - "commander": "^9.2.0", - "file-url": "^3.0.0", - "get-stdin": "^8.0.0", - "glob": "^8.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "pollock": "^0.2.0", - "puppeteer": "^13.7.0", - "tmp": "^0.2.1" + "cheerio": "^1.1.0", + "file-url": "^4.0.0", + "puppeteer-core": "^24.10.1", + "tmp": "^0.2.3" }, "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/convert-svg-core/node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" + "node": ">=22" } }, "node_modules/convert-svg-to-png": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", - "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.7.1.tgz", + "integrity": "sha512-XgLC/EmK0/GvdaHpCpEHCHL/ty/TDeezk8+AKWmUfEgUrYiwR9Tqrih9zfVWVzQYvn8mtjLvROv9xRQ7FHBo/Q==", "dev": true, "funding": [ { @@ -2511,14 +3091,12 @@ "url": "https://www.patreon.com/neocotic" } ], + "license": "MIT", "dependencies": { - "convert-svg-core": "^0.6.4" - }, - "bin": { - "convert-svg-to-png": "bin/convert-svg-to-png" + "convert-svg-core": "^0.7.1" }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=22" } }, "node_modules/cookie": { @@ -2526,29 +3104,52 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "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==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, - "peer": true, - "bin": { - "crc32": "bin/crc32.njs" + "license": "MIT", + "peer": true + }, + "node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=0.8" - } - }, + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "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==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "cipher-base": "^1.0.1", @@ -2563,6 +3164,7 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "cipher-base": "^1.0.3", @@ -2573,20 +3175,100 @@ "sha.js": "^2.4.8" } }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "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, + "license": "MIT", + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/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==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "node-fetch": "2.6.7" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "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, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": "*" } }, "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==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -2599,10 +3281,11 @@ } }, "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==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -2611,22 +3294,44 @@ } }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dev": true, + "license": "ISC", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "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, + "license": "MIT", + "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==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2637,11 +3342,126 @@ } } }, - "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==", + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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", + "peer": true, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "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/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", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/degenerator/node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "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/degenerator/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", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/degenerator/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/degenerator/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, + "license": "BSD-3-Clause", + "optional": true, "engines": { "node": ">=0.10.0" } @@ -2660,16 +3480,27 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "dev": true + "version": "0.0.1595872", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz", + "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, "node_modules/diff-match-patch": { "version": "1.0.5", @@ -2677,11 +3508,39 @@ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", "dev": true }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=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", @@ -2701,13 +3560,15 @@ "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" }, @@ -2719,24 +3580,49 @@ } }, "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -2748,45 +3634,76 @@ } }, "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==", - "dev": true + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "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==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8.6" } }, "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "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" }, @@ -2799,20 +3716,81 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "dev": true, "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": { @@ -2824,6 +3802,7 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -2831,13 +3810,17 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dev": true, + "license": "ISC", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/es6-weak-map": { @@ -2845,6 +3828,7 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, + "license": "ISC", "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -2853,93 +3837,134 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } }, "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==", + "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": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "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" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" } }, - "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==", + "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, - "peer": true + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } }, - "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==", + "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, - "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" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethereumjs-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==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@types/node": "*" + "@noble/hashes": "^1.4.0" } }, - "node_modules/ethereumjs-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==", + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "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==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/pbkdf2": "^3.0.0", @@ -2959,87 +3984,143 @@ "setimmediate": "^1.0.5" } }, + "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==", + "dev": true, + "license": "MPL-2.0", + "peer": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", "dev": true, "funding": [ { "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "url": "https://github.com/sponsors/ethers-io/" }, { "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "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/ethjs-util": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/ethjs-unit": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, "engines": { "node": ">=6.5.0", "npm": ">=3" } }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, - "node_modules/event-target-shim": { + "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "license": "MIT", + "peer": true + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" } }, "node_modules/evp_bytestokey": { @@ -3047,6 +4128,7 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "md5.js": "^1.3.4", @@ -3058,21 +4140,17 @@ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, + "license": "ISC", "dependencies": { "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -3088,51 +4166,140 @@ "@types/yauzl": "^2.9.1" } }, + "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==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "peer": true, + "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.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-4.0.0.tgz", + "integrity": "sha512-vRCdScQ6j3Ku6Kd7W1kZk9c++5SqD6Xz5Jotrjr/nkY714M14RFHy/AAVA2WQvpsqVAVgTbDrYyBpU205F0cLw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, + "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", + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "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, - "peer": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -3140,6 +4307,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3149,14 +4317,66 @@ } } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/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, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "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==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -3168,27 +4388,22 @@ "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", "dev": true, - "peer": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "license": "MIT" }, "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==", + "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", "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12" } }, "node_modules/fs.realpath": { @@ -3197,52 +4412,89 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "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, - "peer": true + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "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==", + "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==", "dev": true, - "peer": true + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "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-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "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, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.4" } }, "node_modules/get-stream": { @@ -3250,6 +4502,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -3260,31 +4513,253 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "dev": true, + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "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", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/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", + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/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", + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/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", + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/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, + "license": "MIT", + "peer": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/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", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/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", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "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", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "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", + "peer": true, + "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" + } + }, + "node_modules/globby/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/globby/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/graphviz": { "version": "0.0.9", @@ -3298,59 +4773,82 @@ "node": ">=0.6.8" } }, - "node_modules/hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/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, + "license": "BSD-3-Clause", "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hardhat": { + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "dev": true, + "license": "MIT", "dependencies": { + "@ethereumjs/util": "^9.1.0", "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", + "@nomicfoundation/edr": "0.12.0-next.23", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.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", + "find-up": "^5.0.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", + "json-stream-stringify": "^3.1.4", "keccak": "^3.0.2", "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", - "qs": "^6.7.0", + "picocolors": "^1.1.0", "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", + "tinyglobby": "^0.2.6", "tsort": "0.0.1", "undici": "^5.14.0", "uuid": "^8.3.2", @@ -3359,9 +4857,6 @@ "bin": { "hardhat": "internal/cli/bootstrap.js" }, - "engines": { - "node": ">=14.0.0" - }, "peerDependencies": { "ts-node": "*", "typescript": "*" @@ -3375,806 +4870,877 @@ } } }, - "node_modules/hardhat/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, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat/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==", + "node_modules/hardhat-gas-reporter": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-2.3.0.tgz", + "integrity": "sha512-ySdA+044xMQv1BlJu5CYXToHzMexKFfIWxlQTBNNoerx1x96+d15IMdN01iQZ/TJ7NH2V5sU73bz77LoS/PEVw==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/units": "^5.7.0", + "@solidity-parser/parser": "^0.20.1", + "axios": "^1.6.7", + "brotli-wasm": "^2.0.1", + "chalk": "4.1.2", + "cli-table3": "^0.6.3", + "ethereum-cryptography": "^2.1.3", + "glob": "^10.3.10", + "jsonschema": "^1.4.1", + "lodash": "^4.17.21", + "markdown-table": "2.0.0", + "sha1": "^1.1.1", + "viem": "^2.27.0" + }, + "peerDependencies": { + "hardhat": "^2.16.0" } }, - "node_modules/hardhat/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/hardhat-gas-reporter/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "@noble/hashes": "1.4.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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==", + "node_modules/hardhat-gas-reporter/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, "engines": { - "node": ">= 8" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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/hardhat-gas-reporter/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=8" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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/hardhat-gas-reporter/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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/hardhat-gas-reporter/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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==", + "node_modules/hardhat-gas-reporter/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } }, - "node_modules/hardhat/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/hardhat-gas-reporter/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=4" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hardhat/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/hardhat-gas-reporter/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "ISC", "peer": 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" + "brace-expansion": "^2.0.2" }, "engines": { - "node": ">= 8.10.0" + "node": ">=16 || 14 >=14.17" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "node_modules/hardhat/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/hardhat/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/hardhat/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/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, - "peer": 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/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "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, - "peer": true, - "engines": { - "node": ">=0.3.1" + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, "node_modules/hardhat/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==", + "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, - "peer": true, + "license": "MIT", "dependencies": { - "locate-path": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/hardhat/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, - "peer": 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" + "p-locate": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/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==", + "node_modules/hardhat/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, - "peer": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat/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, - "peer": true, - "bin": { - "he": "bin/he" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/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==", + "node_modules/hardhat/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, - "peer": true, + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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, - "peer": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/hardhat/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==", + "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==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "is-extglob": "^2.1.1" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/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==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/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==", + "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==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/minimatch": { + "node_modules/hash-base": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "brace-expansion": "^1.1.7" + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" }, "engines": { - "node": "*" + "node": ">= 0.8" } }, - "node_modules/hardhat/node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "peer": 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": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.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" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } + "node_modules/hash-base/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, + "license": "MIT", + "peer": true }, - "node_modules/hardhat/node_modules/mocha/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/hash-base/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==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "balanced-match": "^1.0.0" + "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/hardhat/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==", + "node_modules/hash-base/node_modules/readable-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, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "peer": true + }, + "node_modules/hash-base/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==", + "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", + "peer": true + }, + "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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/hardhat/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==", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/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==", + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/hardhat/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==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/hardhat/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==", + "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/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==", "dev": true, - "peer": true, "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/hardhat/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==", + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "dev": true, - "peer": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, - "node_modules/hardhat/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==", + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/hardhat/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==", + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/hardhat/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/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, - "peer": true + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } }, - "node_modules/hardhat/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==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, "dependencies": { - "p-try": "^1.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "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==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "p-limit": "^1.1.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/hardhat/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==", + "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", "peer": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/hardhat/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==", + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/hardhat/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/immutable": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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, - "peer": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/hardhat/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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/hardhat/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==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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, + "license": "ISC", + "peer": true + }, + "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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/hardhat/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/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, - "peer": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "fp-ts": "^1.0.0" } }, - "node_modules/hardhat/node_modules/supports-color/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==", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 12" } }, - "node_modules/hardhat/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==", + "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, - "peer": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } + "license": "MIT" }, - "node_modules/hardhat/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==", + "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, - "peer": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/hardhat/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==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/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==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/hardhat/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, - "peer": true - }, - "node_modules/hardhat/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/hardhat/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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==", "dev": true, - "peer": 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" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/hardhat/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==", + "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==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=10" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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==", "dev": true, - "peer": true, - "dependencies": { - "function-bind": "^1.1.1" - }, + "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">=0.12.0" } }, - "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/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/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true, - "peer": true, + "license": "MIT" + }, + "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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "peer": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, "engines": { "node": ">= 0.4" }, @@ -4182,323 +5748,182 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/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==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node": ">=10" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hash-base/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==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "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", "peer": true }, - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "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==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } + "peer": true }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "node_modules/isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", "dev": true, "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/wevm" } ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" + "license": "MIT", + "peer": true, + "peerDependencies": { + "ws": "*" } }, - "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==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "peer": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "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==", + "node_modules/js-graph-algorithms": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", + "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" + "bin": { + "js-graphs": "src/jsgraphs.js" } }, - "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==", + "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==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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, - "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/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "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==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "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, - "peer": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "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, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/is-hex-prefixed": { + "node_modules/json-schema-traverse": { "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==", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "peer": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } + "license": "MIT", + "peer": true }, - "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==", + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=7.10.1" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "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==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "ISC", + "peer": true }, - "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==", + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-graph-algorithms": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", - "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", - "dev": true, "bin": { - "js-graphs": "src/jsgraphs.js" - } - }, - "node_modules/js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", - "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "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==", - "dev": true - }, - "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==", + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "argparse": "^2.0.1" + "universalify": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", "dev": true, + "license": "MIT", "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": "*" } }, "node_modules/keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "dev": true, "hasInstallScript": true, - "peer": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -4508,19 +5933,15 @@ "node": ">=10.0.0" } }, - "node_modules/keccak/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==", + "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, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, "node_modules/klaw": { @@ -4532,110 +5953,85 @@ "node": ">=14.14.0" } }, - "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "peer": true, - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "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": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder/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" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": ">= 0.8.0" } }, - "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==", + "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, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT", "peer": true }, - "node_modules/lodash.omit": { + "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "dev": true + "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.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 + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true }, "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, - "peer": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -4647,11 +6043,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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" + } + }, "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, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC", "peer": true }, "node_modules/lru-queue": { @@ -4659,30 +6074,42 @@ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, + "license": "MIT", "dependencies": { "es5-ext": "~0.10.2" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "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, + "license": "ISC", + "peer": true + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "p-defer": "^1.0.0" + "repeat-string": "^1.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" } }, "node_modules/md5.js": { @@ -4690,6 +6117,7 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "hash-base": "^3.0.0", @@ -4698,34 +6126,23 @@ } }, "node_modules/memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", "dev": true, + "license": "ISC", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", + "d": "^1.0.2", + "es5-ext": "^0.10.64", "es6-weak-map": "^2.0.3", "event-emitter": "^0.3.5", "is-promise": "^2.2.2", "lru-queue": "^0.1.0", "next-tick": "^1.1.0", "timers-ext": "^0.1.7" - } - }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "peer": true, - "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" }, "engines": { - "node": ">=12" + "node": ">=0.12" } }, "node_modules/memorystream": { @@ -4733,290 +6150,291 @@ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, - "peer": true, "engines": { "node": ">= 0.10.0" } }, - "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==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "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==", + "node_modules/micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" } }, - "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==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "node_modules/micro-eth-signer/node_modules/@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@noble/hashes": "1.7.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "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, - "peer": true, - "dependencies": { - "obliterator": "^2.0.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "node_modules/micro-eth-signer/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "peer": true, - "bin": { - "nanoid": "bin/nanoid.cjs" + "node": "^14.21.3 || >=16" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", - "dev": true, - "peer": true - }, - "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==", - "dev": true - }, - "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 - }, - "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==", + "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, + "license": "MIT", "peer": true }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "@scure/base": "~1.2.5" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "peer": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "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==", "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "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==", + "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==", "dev": true, "dependencies": { - "boolbase": "^1.0.0" + "mime-db": "1.52.0" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/number-is-nan": { + "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "peer": true + "license": "BlueOak-1.0.0", + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "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==", + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true, - "dependencies": { - "wrappy": "1" - } + "license": "MIT" }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "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, - "engines": { - "node": ">=4" + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "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": ">=4" + "node": ">= 14.0.0" } }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "node_modules/mocha/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, + "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": ">=6" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "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==", + "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": { - "p-try": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^2.2.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "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, - "peer": true, + "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" @@ -5025,5753 +6443,9649 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "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": { - "entities": "^4.4.0" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "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": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/mocha/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" + }, "engines": { - "node": ">=8" + "node": ">=8.10.0" } }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", + "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" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "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==", + "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, - "peer": true + "license": "MIT" }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "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" + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" }, "engines": { - "node": ">=0.12" + "node": ">=10" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "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, + "license": "MIT", + "peer": true }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">= 0.4.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "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==", + "dev": true, + "license": "ISC" + }, + "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==", "dev": true, + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "lodash": "^4.17.21" } }, - "node_modules/pollock": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", - "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", - "dev": true + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "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": ">=0.4.0" + "node": ">=12.19" } }, - "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 - }, - "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==", + "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": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "node_modules/puppeteer": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", - "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", - "deprecated": "< 18.1.0 is no longer supported", + "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, - "hasInstallScript": true, - "dependencies": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, + "license": "MIT", "engines": { - "node": ">=10.18.1" + "node": ">=0.10.0" } }, - "node_modules/puppeteer/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "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, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "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==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "side-channel": "^1.0.4" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.5.0", + "npm": ">=3" } }, - "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==", + "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==", "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", "peer": true }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "peer": true, "dependencies": { - "safe-buffer": "^5.1.0" + "wrappy": "1" } }, - "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==", + "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": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "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": ">= 0.8" + "node": ">= 0.8.0" } }, - "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==", + "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, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT", + "peer": true }, - "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==", + "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, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/ox": { + "version": "0.14.15", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.15.tgz", + "integrity": "sha512-3TubCmbKen/cuZQzX0qDbOS5lojjdSZ90lqKxWIDWd5siuJ0IJBaTXMYs8eMPLcraqnOwGZazz3apHPGiRCkGQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", "peer": true, "dependencies": { - "path-parse": "^1.0.6" + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/ox/node_modules/@adraffy/ens-normalize": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ox/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "glob": "^7.1.3" + "@noble/hashes": "1.8.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/rimraf/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/ox/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf/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/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { - "node": "*" + "node": ">= 14" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "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==", + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.2.0" + "agent-base": "^7.1.2", + "debug": "4" }, - "bin": { - "rlp": "bin/rlp" + "engines": { + "node": ">= 14" } }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, + "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" } }, - "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==", - "dev": true, - "peer": true - }, - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, + "license": "BlueOak-1.0.0", "peer": true }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "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==", "dev": true, - "hasInstallScript": true, - "peer": true, + "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=6" } }, - "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==", + "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==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "randombytes": "^2.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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/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==", - "dev": true, - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, - "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==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" }, - "bin": { - "sha.js": "bin.js" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/sha1-file": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-1.0.4.tgz", - "integrity": "sha512-IgcUYjTck/UAx0wdtBoTwiy4/yiIZX6do4uaqUtryJY/pBOQC1w3Cb/bZMyC2H3QYnodL5vbX0lY69xlWqeBnA==", - "deprecated": "Version 1.x or earlier is no longer supported.", - "dev": true - }, - "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==", + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "parse5": "^7.0.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "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==", + "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, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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==", "dev": true, "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "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/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==", + "dev": true, + "license": "MIT" }, - "node_modules/sol2uml": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.5.20.tgz", - "integrity": "sha512-La+UQ4Y6n8yG3Vfy5FudhZGJvymJ13PxuC00W4pKF3iIZFcRGPVH7RLBQ8lc+JqOt+YW92oSaSGSwHnlTmd7tg==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", + "peer": true, "dependencies": { - "@aduh95/viz.js": "^3.7.0", - "@solidity-parser/parser": "^0.16.1", - "axios": "^1.6.0", - "axios-debug-log": "^1.0.0", - "cli-color": "^2.0.3", - "commander": "^11.1.0", - "convert-svg-to-png": "^0.6.4", - "debug": "^4.3.4", - "diff-match-patch": "^1.0.5", - "ethers": "^5.7.2", - "js-graph-algorithms": "^1.0.18", - "klaw": "^4.1.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, - "bin": { - "sol2uml": "lib/sol2uml.js" + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/sol2uml/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/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/sol2uml/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "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": ">=16" + "node": "*" } }, - "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, + "license": "MIT", "peer": true, "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" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.10" } }, - "node_modules/solc/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/pbkdf2/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==", "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.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", + "peer": true }, - "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==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, - "peer": true + "license": "MIT" }, - "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==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "peer": 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" - } + "license": "ISC" }, - "node_modules/solc/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "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==", + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=6" } }, - "node_modules/solc/node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" + "engines": { + "node": ">= 0.4" } }, - "node_modules/solc/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/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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">= 0.8.0" } }, - "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==", + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, "bin": { - "rimraf": "bin.js" + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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==", "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "peer": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/solc/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=0.6.0" + "node": ">= 6" } }, - "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/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/source-map-support/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==", + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "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/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.7.1" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "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/proxy-agent/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, - "peer": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=12" } }, - "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/proxy-agent/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, - "peer": true, - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=10" } }, - "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/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/puppeteer": { + "version": "24.41.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.41.0.tgz", + "integrity": "sha512-W6Fk0J3TPjjtwjXOyR/qf+YaL0H/Uq8HIgHcXG4mNM/IgbKMCH/HPyK0Fi2qbTU/QpSl9bCte2yBpGHKejTpIw==", "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1595872", + "puppeteer-core": "24.41.0", + "typed-query-selector": "^2.12.1" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "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==", + "node_modules/puppeteer-core": { + "version": "24.41.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.41.0.tgz", + "integrity": "sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ansi-regex": "^3.0.0" + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1595872", + "typed-query-selector": "^2.12.1", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.19.0" }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "dev": true, + "license": "MIT", "engines": { - "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==", - "dev": true, - "peer": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" + "node": ">=10.0.0" }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "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==", + "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==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "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", + "peer": true }, - "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "^5.1.0" } }, - "node_modules/surya": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.6.tgz", - "integrity": "sha512-zaTYkRbms26cuOWu5jon5l4OsToHX7ZEflqTozXgq/XxUL3VY+tEnxT9Te2WVsA/sYgZPwcH92yQZJgljsss4g==", + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, + "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.14.1", - "c3-linearization": "^0.3.0", - "colors": "^1.4.0", - "graphviz": "0.0.9", - "sha1-file": "^1.0.4", - "treeify": "^1.1.0", - "yargs": "^11.1.1" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, - "bin": { - "surya": "bin/surya" + "engines": { + "node": ">= 0.8" } }, - "node_modules/surya/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==", + "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==", "dev": true, + "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 6" } }, - "node_modules/surya/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/surya/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==", + "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": { - "locate-path": "^2.0.0" + "resolve": "^1.1.6" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/surya/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "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": { - "pump": "^3.0.0" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/surya/node_modules/invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, - "engines": { - "node": ">=4" + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/surya/node_modules/lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "invert-kv": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/surya/node_modules/locate-path": { + "node_modules/reduce-flatten": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/surya/node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.10" } }, - "node_modules/surya/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/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, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/surya/node_modules/os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "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==", "dev": true, - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/surya/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==", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, + "license": "MIT", "dependencies": { - "p-try": "^1.0.0" + "path-parse": "^1.0.6" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/surya/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/surya/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==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/surya/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==", + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/surya/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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==", "dev": true, + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "bn.js": "^5.2.0" + }, "bin": { - "semver": "bin/semver" + "rlp": "bin/rlp" } }, - "node_modules/surya/node_modules/yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "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==", "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", + "peer": true, "dependencies": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "queue-microtask": "^1.2.2" } }, - "node_modules/surya/node_modules/yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "dependencies": { - "camelcase": "^4.1.0" + "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", + "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" + }, + "bin": { + "istanbul": "lib/cli.js" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "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": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "sprintf-js": "~1.0.2" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": "*" } }, - "node_modules/temp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", - "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", + "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, - "engines": [ - "node >=0.4.0" - ] - }, - "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 + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "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, - "dependencies": { - "rimraf": "^3.0.0" + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=8.17.0" + "node": ">=4" } }, - "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/sc-istanbul/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.6" + "node": "*" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "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/treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "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" + }, "engines": { - "node": ">=0.6" + "node": ">=0.8.0" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "dev": true, - "peer": true + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "dev": true, + "license": "MIT", "peer": true }, - "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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/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==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/type": { + "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" }, - "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==", + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "peer": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, "engines": { - "node": ">=10" + "node": ">= 0.10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "node_modules/sha.js/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==", "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } + "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", + "peer": true }, - "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "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, + "license": "BSD-3-Clause", "peer": true, "dependencies": { - "busboy": "^1.6.0" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, "engines": { - "node": ">=14.0" + "node": "*" } }, - "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/sha1-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-2.0.1.tgz", + "integrity": "sha512-L4Kum9Lp8cWqcGKycZcXxR6spUoG4idDIUzAKjPiELnIZWxiFlZ5HFVzFxVxuWuGPsrraeL0JoGk0nFZ7AGFEQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.2.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "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.8" + "node": ">=4" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "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==", + "node_modules/shelljs/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, + "license": "MIT", "peer": true, - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "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==", - "dev": true - }, - "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==", + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "isexe": "^2.0.0" + "brace-expansion": "^1.1.7" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "*" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "peer": true, + "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==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "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/wrap-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "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==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, + "license": "MIT", "dependencies": { - "number-is-nan": "^1.0.0" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, + "license": "MIT", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "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==", - "dev": true + "node_modules/sol2uml": { + "version": "2.5.26", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.5.26.tgz", + "integrity": "sha512-lq7ktw4yLDcgF8em5NXaCyKJmd6qgDIxSG/onWT4CGLQeWufauBnGHuTRf/yYY1DCPmpF9PENQ5hcRPSAIqRcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.20.1", + "axios": "^1.13.6", + "axios-debug-log": "^1.0.0", + "cli-color": "^2.0.4", + "commander": "^12.1.0", + "convert-svg-to-png": "^0.7.1", + "debug": "^4.4.1", + "diff-match-patch": "^1.0.5", + "ethers": "^6.16.0", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.1.0", + "puppeteer": "^24.37.5" + }, + "bin": { + "sol2uml": "lib/sol2uml.js" + } }, - "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==", + "node_modules/sol2uml/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=18" + } + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "bin": { + "solcjs": "solc.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=10.0.0" } }, - "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "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, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "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==", + "node_modules/solc/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=10" + "node": ">=0.6.0" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/solidity-coverage": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", "dev": true, + "license": "ISC", "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.20.1", + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" } }, - "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==", + "node_modules/solidity-coverage/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", "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "color-convert": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "node_modules/solidity-coverage/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", + "peer": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/solidity-coverage/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", "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "color-name": "1.1.3" } - } - }, - "dependencies": { - "@aduh95/viz.js": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", - "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", - "dev": true }, - "@chainsafe/as-sha256": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", - "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", + "node_modules/solidity-coverage/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, + "license": "MIT", "peer": true }, - "@chainsafe/persistent-merkle-tree": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", - "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@chainsafe/as-sha256": "^0.3.1" + "engines": { + "node": ">=0.8.0" } }, - "@chainsafe/ssz": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", - "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.4.2", - "case": "^1.6.3" + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "node_modules/solidity-coverage/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, - "requires": { - "@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" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" } }, - "@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==", + "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, - "requires": { - "@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" + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@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==", + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "requires": { - "@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" + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "node_modules/solidity-coverage/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, - "requires": { - "@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" + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "@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==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0" + "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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" } }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "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, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, - "@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==", + "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==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "node_modules/source-map-support/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, - "requires": { - "@ethersproject/logger": "^5.7.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0" + "license": "ISC", + "peer": true, + "dependencies": { + "readable-stream": "^3.0.0" } }, - "@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==", + "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, - "requires": { - "@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" + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" } }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "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==", "dev": true, - "requires": { - "@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" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, - "requires": { - "@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" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "@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==", + "node_modules/streamx": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", "dev": true, - "requires": { - "@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" + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" } }, - "@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==", + "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==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true + "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, + "license": "WTFPL OR MIT", + "peer": true }, - "@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "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==", "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "@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, - "requires": { - "@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": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "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==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "license": "MIT", + "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "@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==", + "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==", "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@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==", + "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, - "requires": { - "@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" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "node_modules/surya": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.13.tgz", + "integrity": "sha512-ff2YmkYu9+u9A1tUv6cEuQDhLw1N+++iI+ZenXyhYR7YmaiQ19h32p2VchBn6zy3JPcfpvBZjf/aEmLbSMW1WA==", "dev": true, - "requires": { - "@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" + "license": "Apache-2.0", + "dependencies": { + "@solidity-parser/parser": "^0.16.1", + "c3-linearization": "^0.3.0", + "colors": "^1.4.0", + "graphviz": "0.0.9", + "sha1-file": "^2.0.0", + "treeify": "^1.1.0", + "yargs": "^17.0.0" + }, + "bin": { + "surya": "bin/surya" } }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "node_modules/surya/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, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" } }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "node_modules/surya/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "@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" + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "node_modules/surya/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "@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==", + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, - "requires": { - "@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" + "license": "BSD-3-Clause", + "peer": true, + "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" } }, - "@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "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, - "requires": { - "@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" + "license": "MIT", + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "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==", "dev": true, - "requires": { - "@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" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "@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==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "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": ">=8" } }, - "@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==", + "node_modules/tar-fs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } }, - "@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==", + "node_modules/tar-stream": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } }, - "@nomicfoundation/ethereumjs-block": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", - "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, - "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1" - }, + "license": "MIT", "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - } + "streamx": "^2.12.5" } }, - "@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", - "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "node_modules/temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", "dev": true, - "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-ethash": "3.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, + "engines": [ + "node >=0.4.0" + ] + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "peer": true - } + "b4a": "^1.6.4" } }, - "@nomicfoundation/ethereumjs-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", - "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-util": "9.0.1", - "crc-32": "^1.2.0" + "dependencies": { + "readable-stream": "3" } }, - "@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", - "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", "dev": true, - "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - } + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "@nomicfoundation/ethereumjs-evm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", - "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "peer": true, - "requires": { - "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" + "license": "MIT", + "engines": { + "node": ">=12.0.0" }, - "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true } } }, - "@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", - "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, - "peer": true + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", - "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, - "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1", - "js-sdsl": "^4.1.4" - }, - "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - } + "license": "MIT", + "engines": { + "node": ">=14.14" } }, - "@nomicfoundation/ethereumjs-trie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", - "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@types/readable-stream": "^2.3.13", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT", + "peer": true }, - "@nomicfoundation/ethereumjs-tx": { + "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", - "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "peer": true, - "requires": { - "@chainsafe/ssz": "^0.9.2", - "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" }, + "engines": { + "node": ">=8.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "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==", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - } + "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" } }, - "@nomicfoundation/ethereumjs-util": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", - "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "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, + "license": "MIT", "peer": true, - "requires": { - "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "ethereum-cryptography": "0.1.3" + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "peer": true, + "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" }, - "dependencies": { - "@chainsafe/persistent-merkle-tree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", - "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", - "dev": true, - "peer": true, - "requires": { - "@chainsafe/as-sha256": "^0.3.1" - } - }, - "@chainsafe/ssz": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", - "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", - "dev": true, - "peer": true, - "requires": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.5.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" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } + "@swc/wasm": { + "optional": true } } }, - "@nomicfoundation/ethereumjs-vm": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", - "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" + }, + "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, - "requires": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, "dependencies": { - "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==", - "dev": true, - "peer": true, - "requires": { - "@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" - } - } + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "@nomicfoundation/hardhat-foundry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.1.tgz", - "integrity": "sha512-sQEaX3rik6Gclmek4MqCyOc9+vOM0ZS40eUARrB6K9t6wthqCwJ29CClfxLdbrjn/3MM5hX8ioD+/9OqdGVxSQ==", + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "requires": { - "chalk": "^2.4.2" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, - "dependencies": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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, - "requires": { - "color-name": "1.1.3" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^3.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@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==", - "dev": true, - "peer": true, - "requires": { - "@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" + "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, + "license": "MIT", + "peer": 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" + }, + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@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==", - "dev": true, - "optional": true, - "peer": true - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "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==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "peer": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.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" } }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "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, + "license": "MIT", "peer": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "peer": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@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==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "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==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@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": ">= 4.0.0" } }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" } }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "node_modules/typed-query-selector": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==", "dev": true, - "peer": true + "license": "MIT" }, - "@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==", + "node_modules/typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, + "license": "Apache-2.0", "peer": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "@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==", + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "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, "peer": true, - "requires": { - "@types/node": "*" + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, - "requires": { - "@types/ms": "*" + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" } }, - "@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==", + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "dev": true, - "peer": true + "license": "MIT" }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", - "dev": true + "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", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "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, - "peer": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "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, - "peer": true, - "requires": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } + "license": "MIT", + "peer": true }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "node_modules/viem": { + "version": "2.47.18", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.47.18.tgz", + "integrity": "sha512-m3kr+/i8MddeY5fmB2y2v5B0vDL0x8R4v/8gai4Lh4jh8KOWlQqml7PFLtilNomoDm3mINxdA0JnYBJfknNoEg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", "peer": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.15", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "dev": true, - "optional": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "event-target-shim": "^5.0.0" + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "node_modules/viem/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "peer": true + "utf-8-validate": { + "optional": true } } }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "peer": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "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/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, - "requires": { - "debug": "4" + "license": "LGPL-3.0", + "peer": true, + "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" + }, + "engines": { + "node": ">=8.0.0" } }, - "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/web3-utils/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", "peer": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" } }, - "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==", + "node_modules/web3-utils/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, - "peer": true + "license": "MPL-2.0", + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } }, - "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==", + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "type-fest": "^0.21.3" + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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 - }, - "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/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "requires": { - "color-convert": "^2.0.1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "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 - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/web3-utils/node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "peer": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, - "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "axios-debug-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/axios-debug-log/-/axios-debug-log-1.0.0.tgz", - "integrity": "sha512-ZjMaEBEij9w+Vbk2Uc3XflchTT7j9rZdYD/snN+XQ5FRDq1QjZNhh0Izb3KSyarU5vTkiCvJyg1xDiQBHZZB9w==", + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0" + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "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==", + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "safe-buffer": "^5.0.1" + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "bigint-crypto-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", - "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", + "node_modules/webdriver-bidi-protocol": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", "dev": true, - "peer": true + "license": "Apache-2.0" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true, - "peer": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "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 - }, - "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/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, - "requires": { - "balanced-match": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "peer": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "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/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "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" + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "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, - "peer": true, - "requires": { - "base-x": "^3.0.2" + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "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, + "license": "MIT", "peer": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": ">=0.10.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "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==", + "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, + "license": "MIT", "peer": true }, - "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/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "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", "peer": true, - "requires": { - "streamsearch": "^1.1.0" + "engines": { + "node": ">=8" } }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, - "peer": true + "license": "Apache-2.0" }, - "c3-linearization": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/c3-linearization/-/c3-linearization-0.3.0.tgz", - "integrity": "sha512-eQNsZQhFSJAhrNrITy2FpKh7EHS98q/pniDtQhndWqqsvayiPeqZ9T6I9V9PsHcm0nc+ZYJHKUvI/hh37I33HQ==", - "dev": true + "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", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/wrap-ansi-cjs": { + "name": "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", "peer": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "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==", "dev": true }, - "case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", - "dev": true, - "peer": true - }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "peer": 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 + } + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "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, - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" + "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" + }, + "engines": { + "node": ">=10" } }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { + "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } }, - "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/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "classic-level": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", + "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, - "peer": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "^2.2.2", - "node-gyp-build": "^4.3.0" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/yargs/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, - "peer": true + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "cli-color": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", - "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.61", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.15", - "timers-ext": "^0.1.7" + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "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/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, - "requires": { - "color-name": "~1.1.4" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@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 }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "@aduh95/viz.js": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.7.0.tgz", + "integrity": "sha512-20Pk2Z98fbPLkECcrZSJszKos/OgtvJJR3NcbVfgCJ6EQjDNzW2P1BKqImOz3tJ952dvO2DWEhcLhQ1Wz1e9ng==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, - "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==", + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true + }, + "@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, + "optional": true, "peer": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "@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, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", "dev": true }, - "convert-svg-core": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.6.4.tgz", - "integrity": "sha512-8mS0n7otc1lljTte4z7nDhihEakKCRq4w5ivMnIGeOZuD/OV/eDZNNEgGLV1ET3p+rMbnrZnX4lAcsf14WzD5w==", + "@ethereumjs/util": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz", + "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==", "dev": true, "requires": { - "chalk": "^4.1.2", - "cheerio": "^1.0.0-rc.11", - "commander": "^9.2.0", - "file-url": "^3.0.0", - "get-stdin": "^8.0.0", - "glob": "^8.0.1", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "pollock": "^0.2.0", - "puppeteer": "^13.7.0", - "tmp": "^0.2.1" + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.2.1" }, "dependencies": { - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", + "@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true + }, + "@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "requires": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + } + }, + "@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "requires": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + } + }, + "ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "requires": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } } } }, - "convert-svg-to-png": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.6.4.tgz", - "integrity": "sha512-zHNTuVedkyuhMl+f+HMm2L7+TKDYCKFAqAmDqUr0dN7/xtgYe76PPAydjlFzeLbzEpGtEfhaA15q+ejpLaVo3g==", + "@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "dev": true, "requires": { - "convert-svg-core": "^0.6.4" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "dev": true, - "peer": true + "requires": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "dev": true, - "peer": true + "requires": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } }, - "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==", + "@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "dev": true, - "peer": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "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==", + "@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "dev": true, - "peer": true, "requires": { - "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" + "@ethersproject/bytes": "^5.8.0" } }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "dev": true, "requires": { - "node-fetch": "2.6.7" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "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==", + "@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "@ethersproject/logger": "^5.8.0" } }, - "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 - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "dev": true, "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "@ethersproject/bignumber": "^5.8.0" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "dev": true, "requires": { - "ms": "2.1.2" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "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 - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "dev": true, - "peer": true - }, - "devtools-protocol": { - "version": "0.0.981744", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz", - "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==", - "dev": true + "requires": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } }, - "diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "dev": true }, - "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==", + "@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "dev": true, "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "@ethersproject/logger": "^5.8.0" } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true + "@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "requires": { + "@ethersproject/logger": "^5.8.0" + } }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", "dev": true, "requires": { - "domelementtype": "^2.3.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "dev": true, "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" } }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", "dev": true, "requires": { - "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" - }, - "dependencies": { - "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 - } + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "peer": true - }, - "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==", + "@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "dev": true, "requires": { - "once": "^1.4.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", "dev": true, "peer": true, "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true - }, - "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, - "peer": true - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "peer": true - }, - "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==", + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true }, - "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, - "peer": true, - "requires": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "peer": true, "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "dependencies": { - "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==", + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "peer": true - } - } - }, - "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, - "peer": true, - "requires": { - "@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" - }, - "dependencies": { - "@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==", + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "peer": true, "requires": { - "@types/node": "*" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" } }, - "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==", + "strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, - "peer": true + "peer": true, + "requires": { + "ansi-regex": "^6.2.2" + } }, - "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==", + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "peer": true, "requires": { - "@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" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" } } } }, - "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "requires": { - "@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" - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "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==", + "@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==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "peer": true }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "peer": true }, - "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==", + "@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, "peer": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "@noble/ciphers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", + "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", "dev": true, - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", - "dev": true - } - } + "peer": true }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "@noble/hashes": "1.3.2" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } + "@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 }, - "file-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", - "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "@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 }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "peer": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "@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==", "dev": true, "peer": true }, - "follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true - }, - "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==", + "@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==", "dev": true, + "peer": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "@nomicfoundation/edr": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.12.0-next.23.tgz", + "integrity": "sha512-F2/6HZh8Q9RsgkOIkRrckldbhPjIZY7d4mT9LYuW68miwGQ5l7CkAgcz9fRRiurA0+YJhtsbx/EyrD9DmX9BOw==", "dev": true, - "peer": true + "requires": { + "@nomicfoundation/edr-darwin-arm64": "0.12.0-next.23", + "@nomicfoundation/edr-darwin-x64": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-arm64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-gnu": "0.12.0-next.23", + "@nomicfoundation/edr-linux-x64-musl": "0.12.0-next.23", + "@nomicfoundation/edr-win32-x64-msvc": "0.12.0-next.23" + } + }, + "@nomicfoundation/edr-darwin-arm64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.12.0-next.23.tgz", + "integrity": "sha512-Amh7mRoDzZyJJ4efqoePqdoZOzharmSOttZuJDlVE5yy07BoE8hL6ZRpa5fNYn0LCqn/KoWs8OHANWxhKDGhvQ==", + "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "@nomicfoundation/edr-darwin-x64": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.12.0-next.23.tgz", + "integrity": "sha512-9wn489FIQm7m0UCD+HhktjWx6vskZzeZD9oDc2k9ZvbBzdXwPp5tiDqUBJ+eQpByAzCDfteAJwRn2lQCE0U+Iw==", "dev": true }, - "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, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-nlk5EejSzEUfEngv0Jkhqq3/wINIfF2ED9wAofc22w/V1DV99ASh9l3/e/MIHOQFecIZ9MDqt0Em9/oDyB1Uew==", + "dev": true }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-SJuPBp3Rc6vM92UtVTUxZQ/QlLhLfwTftt2XUiYohmGKB3RjGzpgduEFMCA0LEnucUckU6UHrJNFHiDm77C4PQ==", "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true, - "peer": true + "@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.12.0-next.23.tgz", + "integrity": "sha512-NU+Qs3u7Qt6t3bJFdmmjd5CsvgI2bPPzO31KifM2Ez96/jsXYho5debtTQnimlb5NAqiHTSlxjh/F8ROcptmeQ==", + "dev": true }, - "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==", - "dev": true, - "peer": true + "@nomicfoundation/edr-linux-x64-musl": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.12.0-next.23.tgz", + "integrity": "sha512-F78fZA2h6/ssiCSZOovlgIu0dUeI7ItKPsDDF3UUlIibef052GCXmliMinC90jVPbrjUADMd1BUwjfI0Z8OllQ==", + "dev": true }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.12.0-next.23", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.12.0-next.23.tgz", + "integrity": "sha512-IfJZQJn7d/YyqhmguBIGoCKjE9dKjbu6V6iNEPApfwf5JyyjHYyyfkLU4rf7hygj57bfH4sl1jtQ6r8HnT62lw==", "dev": true }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "@nomicfoundation/hardhat-chai-matchers": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.1.2.tgz", + "integrity": "sha512-NlUlde/ycXw2bLzA2gWjjbxQaD9xIRbAF30nsoEprAWzH8dXEI1ILZUKZMyux9n9iygEXTzN0SDVjE6zWDZi9g==", "dev": true, "peer": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" } }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, - "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==", + "@nomicfoundation/hardhat-ethers": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.1.3.tgz", + "integrity": "sha512-208JcDeVIl+7Wu3MhFUUtiA8TJ7r2Rn3Wr+lSx9PfsDTKkbsAsWPY6N6wQ4mtzDv0/pB9nIbJhkjoHe1EsgNsA==", "dev": true, + "peer": true, "requires": { - "pump": "^3.0.0" + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" } }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "@nomicfoundation/hardhat-foundry": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.2.1.tgz", + "integrity": "sha512-pH1KeyI0sysgi7I7uQKPLXWl895EkuS6V41rSi820Ipqp/FScIwDh27RbevgC9zJ4ufSsSz34njm9cvRMGMNVA==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "picocolors": "^1.1.0" } }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "@nomicfoundation/hardhat-ignition": { + "version": "0.15.16", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.16.tgz", + "integrity": "sha512-T0JTnuib7QcpsWkHCPLT7Z6F483EjTdcdjb1e00jqS9zTGCPqinPB66LLtR/duDLdvgoiCVS6K8WxTQkA/xR1Q==", "dev": true, - "peer": true + "peer": true, + "requires": { + "@nomicfoundation/ignition-core": "^0.15.15", + "@nomicfoundation/ignition-ui": "^0.15.13", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "json5": "^2.2.3", + "prompts": "^2.4.2" + } }, - "graphviz": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", - "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.17", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.17.tgz", + "integrity": "sha512-io6Wrp1dUsJ94xEI3pw6qkPfhc9TFA+e6/+o16yQ8pvBTFMjgK5x8wIHKrrIHr9L3bkuTMtmDjyN4doqO2IqFQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "@nomicfoundation/hardhat-network-helpers": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.1.2.tgz", + "integrity": "sha512-p7HaUVDbLj7ikFivQVNhnfMHUBgiHYMwQWvGn9AriieuopGOELIrwj2KjyM2a6z70zai5YKO264Vwz+3UFJZPQ==", "dev": true, + "peer": true, "requires": { - "temp": "~0.4.0" + "ethereumjs-util": "^7.1.4" } }, - "hardhat": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.14.0.tgz", - "integrity": "sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ==", + "@nomicfoundation/hardhat-toolbox": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-6.1.2.tgz", + "integrity": "sha512-xKL2r43GC/UIcQzmtFSmj3L4KqLSQ4fK+kyUw0vbIp94nV+9o2ZkI1s3znB8EKXqitt9ClXo0qcKj9RKOFjqPQ==", + "dev": true, + "requires": {} + }, + "@nomicfoundation/hardhat-verify": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.3.tgz", + "integrity": "sha512-danbGjPp2WBhLkJdQy9/ARM3WQIK+7vwzE0urNem1qZJjh9f54Kf5f1xuQv8DvqewUAkuPxVt/7q4Grz5WjqSg==", "dev": true, "peer": true, "requires": { "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.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", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.1.0", "semver": "^6.3.0", - "solc": "0.7.3", - "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" + "table": "^6.8.0", + "undici": "^5.14.0" + } + }, + "@nomicfoundation/ignition-core": { + "version": "0.15.15", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.15.tgz", + "integrity": "sha512-JdKFxYknTfOYtFXMN6iFJ1vALJPednuB+9p9OwGIRdoI6HYSh4ZBzyRURgyXtHFyaJ/SF9lBpsYV9/1zEpcYwg==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.14.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" }, "dependencies": { - "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, - "peer": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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, - "peer": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "peer": true - }, - "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, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "peer": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "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, - "peer": true - }, - "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, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "peer": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, "peer": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "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==", + "cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", "dev": true, "peer": true, "requires": { - "color-name": "1.1.3" + "nofilter": "^3.1.0" } + } + } + }, + "@nomicfoundation/ignition-ui": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.13.tgz", + "integrity": "sha512-HbTszdN1iDHCkUS9hLeooqnLEW2U45FaqFwFEYT8nIno2prFZhG+n68JEERjmfFCB5u0WgbuJwk3CgLoqtSL7Q==", + "dev": true, + "peer": true + }, + "@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "requires": { + "@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" + } + }, + "@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", + "dev": true, + "optional": true + }, + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", + "dev": true, + "optional": true + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "peer": true + }, + "@puppeteer/browsers": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", + "dev": true, + "requires": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "dependencies": { + "semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true }, - "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, - "peer": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "peer": true - }, - "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==", + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "peer": true, "requires": { - "to-regex-range": "^5.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } }, - "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==", + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "dev": true + }, + "@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "dev": true, + "peer": true, + "requires": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "dependencies": { + "@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", "dev": true, "peer": true, "requires": { - "locate-path": "^2.0.0" + "@noble/hashes": "1.8.0" } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, - "optional": true, "peer": true - }, - "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==", + } + } + }, + "@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "dev": true, + "peer": true, + "requires": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "peer": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "peer": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + } + } + }, + "@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, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@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, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@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, + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@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 + }, + "@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, + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true + }, + "@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 + }, + "@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, + "peer": true + }, + "@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, + "peer": true + }, + "@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, + "peer": true + }, + "@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, + "peer": true + }, + "@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, + "peer": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + } + }, + "@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, + "peer": true, + "requires": { + "fs-extra": "^9.1.0" + }, + "dependencies": { + "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, - "peer": true - }, - "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==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "@types/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "peer": true + }, + "@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, + "peer": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@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, + "peer": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@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, + "peer": true + }, + "@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "peer": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "dev": true, + "requires": { + "undici-types": "~7.19.0" + } + }, + "@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@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, + "peer": true + }, + "@types/secp256k1": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz", + "integrity": "sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "peer": true + }, + "abitype": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz", + "integrity": "sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "peer": true + }, + "acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "peer": true, + "requires": { + "acorn": "^8.11.0" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "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 + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "peer": true + }, + "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==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "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==", + "dev": true + }, + "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, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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 + }, + "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, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "peer": true + }, + "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 + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "peer": true + }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axios": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "axios-debug-log": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/axios-debug-log/-/axios-debug-log-1.0.0.tgz", + "integrity": "sha512-ZjMaEBEij9w+Vbk2Uc3XflchTT7j9rZdYD/snN+XQ5FRDq1QjZNhh0Izb3KSyarU5vTkiCvJyg1xDiQBHZZB9w==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0" + } + }, + "b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "dev": true, + "requires": {} + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "dev": true, + "requires": {} + }, + "bare-fs": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", + "dev": true, + "requires": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + } + }, + "bare-os": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz", + "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==", + "dev": true + }, + "bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "requires": { + "bare-os": "^3.0.1" + } + }, + "bare-stream": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", + "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", + "dev": true, + "requires": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + } + }, + "bare-url": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.0.tgz", + "integrity": "sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==", + "dev": true, + "requires": { + "bare-path": "^3.0.0" + } + }, + "base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "basic-ftp": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz", + "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true, + "peer": true + }, + "bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true + }, + "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 + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "brotli-wasm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brotli-wasm/-/brotli-wasm-2.0.1.tgz", + "integrity": "sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww==", + "dev": true, + "peer": true + }, + "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 + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "peer": true, + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "peer": true, + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, + "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 + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "peer": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "c3-linearization": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/c3-linearization/-/c3-linearization-0.3.0.tgz", + "integrity": "sha512-eQNsZQhFSJAhrNrITy2FpKh7EHS98q/pniDtQhndWqqsvayiPeqZ9T6I9V9PsHcm0nc+ZYJHKUvI/hh37I33HQ==", + "dev": true + }, + "call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "peer": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "peer": true, + "requires": { + "nofilter": "^3.1.0" + } + }, + "chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "peer": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, + "cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "dev": true, + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "dependencies": { + "undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "chromium-bidi": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-14.0.0.tgz", + "integrity": "sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==", + "dev": true, + "requires": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } + } + }, + "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 + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + } + }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "peer": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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 + }, + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "peer": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "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, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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, + "peer": true + }, + "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, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "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, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "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, + "peer": true + }, + "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, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "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, + "peer": true + } + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "peer": true + }, + "convert-svg-core": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/convert-svg-core/-/convert-svg-core-0.7.1.tgz", + "integrity": "sha512-qlQlT2pHMCG0NmZsh2yuYNYO9zKbOmHoWPT+ibuvpVjvA7l9aNhHS4debQeZGuR0mA4x/0a38zOTqBkkdYoTXQ==", + "dev": true, + "requires": { + "cheerio": "^1.1.0", + "file-url": "^4.0.0", + "puppeteer-core": "^24.10.1", + "tmp": "^0.2.3" + } + }, + "convert-svg-to-png": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/convert-svg-to-png/-/convert-svg-to-png-0.7.1.tgz", + "integrity": "sha512-XgLC/EmK0/GvdaHpCpEHCHL/ty/TDeezk8+AKWmUfEgUrYiwR9Tqrih9zfVWVzQYvn8mtjLvROv9xRQ7FHBo/Q==", + "dev": true, + "requires": { + "convert-svg-core": "^0.7.1" + } + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "peer": true + }, + "cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "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" + } + }, + "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, + "peer": true + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "peer": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "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, + "peer": true + }, + "css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true + }, + "d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "requires": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + } + }, + "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 + }, + "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 + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "peer": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "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, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "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, + "requires": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "dependencies": { + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + } + }, + "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 + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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, + "optional": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "devtools-protocol": { + "version": "0.0.1595872", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1595872.tgz", + "integrity": "sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg==", + "dev": true + }, + "diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true + }, + "diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "dev": true + }, + "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, + "requires": { + "heap": ">= 0.2.0" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "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, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "peer": true + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "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 + }, + "error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "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==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + } + }, + "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==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "requires": { + "d": "^1.0.2", + "ext": "^1.7.0" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "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 + }, + "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, + "peer": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + } + }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "peer": true + }, + "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 + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dev": true, + "peer": true, + "requires": { + "@noble/hashes": "^1.4.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "peer": true + } + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "@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" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + }, + "ethers": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz", + "integrity": "sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A==", + "dev": true, + "requires": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "dependencies": { + "@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dev": true, + "requires": { + "undici-types": "~6.19.2" + } + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "requires": {} + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } + } + }, + "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==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "peer": true + }, + "events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "requires": { + "bare-events": "^2.7.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "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==", + "dev": true, + "peer": true + }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "peer": true + }, + "fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-4.0.0.tgz", + "integrity": "sha512-vRCdScQ6j3Ku6Kd7W1kZk9c++5SqD6Xz5Jotrjr/nkY714M14RFHy/AAVA2WQvpsqVAVgTbDrYyBpU205F0cLw==", + "dev": true + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "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, + "peer": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.2.7" + } + }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "peer": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "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, + "peer": true + } + } + }, + "form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "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 + }, + "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, + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "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 + }, + "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, + "peer": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "dev": true, + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + } + }, + "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, + "peer": true, + "requires": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "dependencies": { + "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, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "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, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "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, + "peer": true + }, + "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, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "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, + "peer": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "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, + "peer": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "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, + "peer": true, + "requires": { + "@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" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true + }, + "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==", + "dev": true + }, + "graphviz": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", + "dev": true, + "requires": { + "temp": "~0.4.0" + } + }, + "handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "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, + "peer": true + } + } + }, + "hardhat": { + "version": "2.28.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.28.6.tgz", + "integrity": "sha512-zQze7qe+8ltwHvhX5NQ8sN1N37WWZGw8L63y+2XcPxGwAjc/SMF829z3NS6o1krX0sryhAsVBK/xrwUqlsot4Q==", + "dev": true, + "requires": { + "@ethereumjs/util": "^9.1.0", + "@ethersproject/abi": "^5.1.2", + "@nomicfoundation/edr": "0.12.0-next.23", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "find-up": "^5.0.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "micro-eth-signer": "^0.14.0", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "picocolors": "^1.1.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", + "tinyglobby": "^0.2.6", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "dependencies": { + "@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 + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true + }, + "@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, + "requires": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "requires": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "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, + "requires": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "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, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "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, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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 + } + } + }, + "hardhat-gas-reporter": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-2.3.0.tgz", + "integrity": "sha512-ySdA+044xMQv1BlJu5CYXToHzMexKFfIWxlQTBNNoerx1x96+d15IMdN01iQZ/TJ7NH2V5sU73bz77LoS/PEVw==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/units": "^5.7.0", + "@solidity-parser/parser": "^0.20.1", + "axios": "^1.6.7", + "brotli-wasm": "^2.0.1", + "chalk": "4.1.2", + "cli-table3": "^0.6.3", + "ethereum-cryptography": "^2.1.3", + "glob": "^10.3.10", + "jsonschema": "^1.4.1", + "lodash": "^4.17.21", + "markdown-table": "2.0.0", + "sha1": "^1.1.1", + "viem": "^2.27.0" + }, + "dependencies": { + "@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "dev": true, + "peer": true, + "requires": { + "@noble/hashes": "1.4.0" + } + }, + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "peer": true + }, + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "peer": true + }, + "@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "dev": true, + "peer": true, + "requires": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + } + }, + "@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "dev": true, + "peer": true, + "requires": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + } + }, + "ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "dev": true, + "peer": true, + "requires": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "peer": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^2.0.2" + } + } + } + }, + "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 + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "peer": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "peer": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "requires": { + "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" + }, + "dependencies": { + "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, + "peer": true + } + } + }, + "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==", + "dev": true, + "peer": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "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 + }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "peer": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dev": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + }, + "dependencies": { + "entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true + } + } + }, + "http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + } + }, + "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, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + } + } + }, + "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, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "peer": true + }, + "immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "peer": true + }, + "immutable": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.8.tgz", + "integrity": "sha512-d/Ld9aLbKpNwyl0KiM2CT1WYvkitQ1TSvmRtkcV8FKStiDoA7Slzgjmb/1G2yhKM1p0XeNOieaTbFZmU1d3Xuw==", + "dev": true + }, + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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 + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "peer": true + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "peer": true + }, + "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, + "requires": { + "fp-ts": "^1.0.0" + } + }, + "ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true + }, + "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 + }, + "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, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "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==", + "dev": true, + "peer": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "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==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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==", + "dev": true, + "peer": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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 + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "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 + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "peer": true, + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "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 + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "peer": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "peer": true + }, + "isows": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz", + "integrity": "sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==", + "dev": true, + "peer": true, + "requires": {} + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "peer": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "js-graph-algorithms": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", + "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", + "dev": true + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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 + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "dev": true + }, + "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==", + "dev": true, + "peer": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true + }, + "jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "peer": true + }, + "keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + }, + "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, + "peer": true + }, + "klaw": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", + "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "peer": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "peer": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "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 + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "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, + "peer": true + }, + "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, + "peer": true + }, + "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, + "peer": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "peer": true + }, + "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, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "peer": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, + "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 + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "peer": true + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "requires": { + "es5-ext": "~0.10.2" + } + }, + "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, + "peer": true + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "peer": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dev": true, + "requires": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true + }, + "micro-eth-signer": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.14.0.tgz", + "integrity": "sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==", + "dev": true, + "requires": { + "@noble/curves": "~1.8.1", + "@noble/hashes": "~1.7.1", + "micro-packed": "~0.7.2" + }, + "dependencies": { + "@noble/curves": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", + "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", "dev": true, - "peer": true, "requires": { - "binary-extensions": "^2.0.0" + "@noble/hashes": "1.7.2" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "peer": true - }, - "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==", - "dev": true, - "peer": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "dev": true + } + } + }, + "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, + "peer": true + }, + "micro-packed": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz", + "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==", + "dev": true, + "requires": { + "@scure/base": "~1.2.5" + } + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "peer": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "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==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true + }, + "minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "peer": true + }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "requires": { + "obliterator": "^2.0.0" + } + }, + "mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "peer": true, "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "peer": true + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } }, - "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==", + "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, - "peer": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "peer": true, "requires": { - "brace-expansion": "^1.1.7" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, - "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "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, - "peer": true, "requires": { - "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": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.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" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "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, - "peer": true - }, - "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, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "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, - "peer": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "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, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "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, - "peer": true - }, - "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, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "p-locate": "^5.0.0" } }, - "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, - "peer": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, - "peer": true + "requires": { + "brace-expansion": "^2.0.1" + } }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "peer": true, "requires": { - "p-try": "^1.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "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, - "peer": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^3.0.2" } }, - "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, - "peer": true - }, - "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, - "peer": true - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "peer": true, "requires": { "picomatch": "^2.2.1" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "peer": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, "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, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "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, - "peer": true - } - } - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "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, - "peer": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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, - "peer": true - } - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "peer": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "peer": true, "requires": { - "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" + "has-flag": "^4.0.0" } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "peer": true } } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "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 + }, + "ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", "dev": true, "peer": true, "requires": { - "function-bind": "^1.1.1" + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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, + "peer": true + }, + "netmask": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "dev": true }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "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==", + "dev": true + }, + "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, + "peer": true, + "requires": { + "lodash": "^4.17.21" + } + }, + "node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true + }, + "nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, "peer": true }, - "has-symbols": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "peer": true, + "requires": { + "abbrev": "1" + } + }, + "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 + }, + "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, + "requires": { + "boolbase": "^1.0.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } + } + }, + "obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "peer": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ordinal": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", "dev": true, "peer": true }, - "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==", + "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 + }, + "ox": { + "version": "0.14.15", + "resolved": "https://registry.npmjs.org/ox/-/ox-0.14.15.tgz", + "integrity": "sha512-3TubCmbKen/cuZQzX0qDbOS5lojjdSZ90lqKxWIDWd5siuJ0IJBaTXMYs8eMPLcraqnOwGZazz3apHPGiRCkGQ==", "dev": true, "peer": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.2.3", + "eventemitter3": "5.0.1" }, "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "@adraffy/ens-normalize": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz", + "integrity": "sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==", + "dev": true, + "peer": true + }, + "@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "dev": true, "peer": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@noble/hashes": "1.8.0" } }, - "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==", + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, "peer": true } } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "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, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "aggregate-error": "^3.0.0" + } + }, + "pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "dev": true, + "requires": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + } + } + }, + "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, + "requires": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" } }, - "hmac-drbg": { + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "peer": true + }, + "parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "callsites": "^3.0.0" } }, - "htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "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==", "dev": true, "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.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" } }, - "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==", + "parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, - "peer": true, "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true + } } }, - "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==", + "parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, "requires": { - "agent-base": "6", - "debug": "4" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, - "peer": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "parse5": "^7.0.0" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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 }, - "immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "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==", "dev": true, "peer": true }, - "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, - "peer": true + "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==", + "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "peer": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true }, - "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==", + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "peer": true + }, + "pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, "peer": true, "requires": { - "fp-ts": "^1.0.0" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } } }, - "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==", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, - "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==", + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "peer": true }, - "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==", + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "peer": true }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true + "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 }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "peer": true }, - "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==", + "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==", "dev": true, "peer": true }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "js-graph-algorithms": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/js-graph-algorithms/-/js-graph-algorithms-1.0.18.tgz", - "integrity": "sha512-Gu1wtWzXBzGeye/j9BuyplGHscwqKRZodp/0M1vyBc19RJpblSwKGu099KwwaTx9cRIV+Qupk8xUMfEiGfFqSA==", - "dev": true + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "peer": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } }, - "js-sdsl": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", - "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, - "peer": true + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + }, + "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 + }, + "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 + } + } }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "dev": true, - "peer": true, "requires": { - "argparse": "^2.0.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "puppeteer": { + "version": "24.41.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.41.0.tgz", + "integrity": "sha512-W6Fk0J3TPjjtwjXOyR/qf+YaL0H/Uq8HIgHcXG4mNM/IgbKMCH/HPyK0Fi2qbTU/QpSl9bCte2yBpGHKejTpIw==", "dev": true, - "peer": true, "requires": { - "graceful-fs": "^4.1.6" + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1595872", + "puppeteer-core": "24.41.0", + "typed-query-selector": "^2.12.1" } }, - "keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", + "puppeteer-core": { + "version": "24.41.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.41.0.tgz", + "integrity": "sha512-rLIUri7E/NQ3APSEYCCozaSJx0u8Tu9wxO6BJwnvXmIgILSK3L0TombaVh3izp1njAGrO6H2ru0hcIrLF+gWLw==", "dev": true, - "peer": true, "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "@puppeteer/browsers": "2.13.0", + "chromium-bidi": "14.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1595872", + "typed-query-selector": "^2.12.1", + "webdriver-bidi-protocol": "0.4.1", + "ws": "^8.19.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "requires": {} } } }, - "klaw": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.1.0.tgz", - "integrity": "sha512-1zGZ9MF9H22UnkpVeuaGKOjfA2t6WrfdrJmGjy16ykcjnKQDmHVX+KI477rpbGevz/5FD4MC3xf1oxylBgcaQw==", - "dev": true + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "peer": true }, - "level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "peer": true, "requires": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" + "safe-buffer": "^5.1.0" } }, - "level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, - "peer": true + "requires": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + } }, - "level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, + "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, + "requires": { + "resolve": "^1.1.6" + } + }, + "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, "peer": true, "requires": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" + "minimatch": "^3.0.5" }, "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "peer": true, "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "brace-expansion": "^1.1.7" } } } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "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, - "requires": { - "p-locate": "^4.1.0" - } + "peer": true }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "peer": true }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "dev": true - }, - "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==", + "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 }, - "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, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "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==", + "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==", "dev": true, "peer": true }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "es5-ext": "~0.10.2" + "path-parse": "^1.0.6" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "peer": true }, - "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==", + "ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, "peer": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" } }, - "memoizee": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", - "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dev": true, + "peer": true, "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.53", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" + "bn.js": "^5.2.0" } }, - "memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "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==", "dev": true, "peer": true, "requires": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" + "queue-microtask": "^1.2.2" } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "peer": true + "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 }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "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==", + "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, + "peer": true, "requires": { - "mime-db": "1.52.0" + "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" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "peer": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "peer": true + }, + "js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "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, + "peer": true + } + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "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, + "peer": true + }, + "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, + "peer": true, + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "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==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "peer": true }, - "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "dev": true, + "peer": true, "requires": { - "brace-expansion": "^2.0.1" + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "dependencies": { + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true, + "peer": true + } } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "peer": true, "requires": { - "obliterator": "^2.0.0" + "randombytes": "^2.1.0" } }, - "module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true, - "peer": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "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==", "dev": true, - "peer": true + "peer": true, + "requires": { + "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" + } }, - "napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", + "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==", "dev": true, "peer": true }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "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==", - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, + "peer": true, "requires": { - "whatwg-url": "^5.0.0" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } } }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dev": true, - "peer": true + "peer": true, + "requires": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "sha1-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-2.0.1.tgz", + "integrity": "sha512-L4Kum9Lp8cWqcGKycZcXxR6spUoG4idDIUzAKjPiELnIZWxiFlZ5HFVzFxVxuWuGPsrraeL0JoGk0nFZ7AGFEQ==", "dev": true, "requires": { - "path-key": "^2.0.0" + "hasha": "^5.2.0" } }, - "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==", + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, + "peer": true, "requires": { - "boolbase": "^1.0.0" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "peer": true }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "peer": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "peer": true, "requires": { - "wrappy": "1" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, - "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, - "peer": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" } }, - "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==", + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "dependencies": { + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + } } }, - "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==", + "sol2uml": { + "version": "2.5.26", + "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.5.26.tgz", + "integrity": "sha512-lq7ktw4yLDcgF8em5NXaCyKJmd6qgDIxSG/onWT4CGLQeWufauBnGHuTRf/yYY1DCPmpF9PENQ5hcRPSAIqRcg==", "dev": true, - "peer": true, "requires": { - "aggregate-error": "^3.0.0" + "@aduh95/viz.js": "^3.7.0", + "@solidity-parser/parser": "^0.20.1", + "axios": "^1.13.6", + "axios-debug-log": "^1.0.0", + "cli-color": "^2.0.4", + "commander": "^12.1.0", + "convert-svg-to-png": "^0.7.1", + "debug": "^4.4.1", + "diff-match-patch": "^1.0.5", + "ethers": "^6.16.0", + "js-graph-algorithms": "^1.0.18", + "klaw": "^4.1.0", + "puppeteer": "^24.37.5" + }, + "dependencies": { + "commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true + } } }, - "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 - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, "requires": { - "entities": "^4.4.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" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } } }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "solidity-coverage": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.17.tgz", + "integrity": "sha512-5P8vnB6qVX9tt1MfuONtCTEaEGO/O4WuEidPHIAJjx4sktHHKhO3rFvnE0q8L30nWJPTrcqGQMT7jpE29B2qow==", "dev": true, + "peer": true, "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.20.1", + "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" + }, + "dependencies": { + "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, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "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, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "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, + "peer": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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, + "peer": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "peer": true + }, + "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, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "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 + } } }, - "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 - }, - "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==", - "dev": true - }, - "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 - }, - "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==", + "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, - "peer": true + "optional": true, + "peer": true, + "requires": { + "amdefine": ">=0.0.4" + } }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "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==", "dev": true, - "peer": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "^3.0.0" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "peer": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", "dev": true, "requires": { - "find-up": "^4.0.0" + "type-fest": "^0.7.1" + }, + "dependencies": { + "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==", + "dev": true + } } }, - "pollock": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/pollock/-/pollock-0.2.1.tgz", - "integrity": "sha512-2Xy6LImSXm0ANKv9BKSVuCa6Z4ACbK7oUrl9gtUgqLkekL7n9C0mlWsOGYYuGbCG8xT0x3Q4F31C3ZMyVQjwsg==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true }, - "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 + "streamx": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "dev": true, + "requires": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "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==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "safe-buffer": "~5.1.0" } }, - "puppeteer": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-13.7.0.tgz", - "integrity": "sha512-U1uufzBjz3+PkpCxFrWzh4OrMIdIb2ztzCu0YEPfRHjHswcSwHZswnK+WdsOQJsRV8WeTg3jLhJR4D867+fjsA==", + "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, + "peer": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "cross-fetch": "3.1.5", - "debug": "4.3.4", - "devtools-protocol": "0.0.981744", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.1", - "pkg-dir": "4.2.0", - "progress": "2.0.3", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "tar-fs": "2.1.1", - "unbzip2-stream": "1.4.3", - "ws": "8.5.0" - }, - "dependencies": { - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "peer": true, "requires": { - "side-channel": "^1.0.4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "peer": true + "requires": { + "ansi-regex": "^5.0.1" + } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "peer": true, "requires": { - "safe-buffer": "^5.1.0" + "ansi-regex": "^5.0.1" } }, - "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==", + "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==", "dev": true, "peer": true, "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "is-hex-prefixed": "1.0.0" } }, - "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 - }, - "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==", - "dev": true, - "peer": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "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==", "dev": true }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "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, - "peer": true, "requires": { - "path-parse": "^1.0.6" + "has-flag": "^4.0.0" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "surya": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.13.tgz", + "integrity": "sha512-ff2YmkYu9+u9A1tUv6cEuQDhLw1N+++iI+ZenXyhYR7YmaiQ19h32p2VchBn6zy3JPcfpvBZjf/aEmLbSMW1WA==", "dev": true, "requires": { - "glob": "^7.1.3" + "@solidity-parser/parser": "^0.16.1", + "c3-linearization": "^0.3.0", + "colors": "^1.4.0", + "graphviz": "0.0.9", + "sha1-file": "^2.0.0", + "treeify": "^1.1.0", + "yargs": "^17.0.0" }, "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "@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, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "antlr4ts": "^0.5.0-alpha.4" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "peer": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" } }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "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, "peer": true, "requires": { - "bn.js": "^5.2.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "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, + "peer": true + }, + "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, + "peer": true + } } }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "tar-fs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", "dev": true, - "peer": true, "requires": { - "queue-microtask": "^1.2.2" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" } }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "tar-stream": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", "dev": true, - "peer": true + "requires": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } }, - "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==", + "teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "requires": { + "streamx": "^2.12.5" + } + }, + "temp": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", + "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, - "peer": true + "requires": { + "b4a": "^1.6.4" + } }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "peer": true, + "requires": { + "readable-stream": "3" + } + }, + "timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "dev": true, + "requires": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + } + }, + "tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true + } + } + }, + "tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, "peer": true, "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "dependencies": { + "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==", + "dev": true, + "peer": true + } } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "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==", "dev": true, - "peer": true, "requires": { - "randombytes": "^2.1.0" + "is-number": "^7.0.0" } }, - "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==", + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "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==", + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true + }, + "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==", "dev": true, - "peer": true + "peer": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + } }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "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, - "peer": true + "peer": true, + "requires": {} }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "peer": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@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" + }, + "dependencies": { + "diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "peer": true + } } }, - "sha1-file": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-1.0.4.tgz", - "integrity": "sha512-IgcUYjTck/UAx0wdtBoTwiy4/yiIZX6do4uaqUtryJY/pBOQC1w3Cb/bZMyC2H3QYnodL5vbX0lY69xlWqeBnA==", + "tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true }, - "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, - "requires": { - "shebang-regex": "^1.0.0" - } + "tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", "dev": true }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "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, "peer": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "prelude-ls": "~1.1.2" } }, - "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 - }, - "sol2uml": { - "version": "2.5.20", - "resolved": "https://registry.npmjs.org/sol2uml/-/sol2uml-2.5.20.tgz", - "integrity": "sha512-La+UQ4Y6n8yG3Vfy5FudhZGJvymJ13PxuC00W4pKF3iIZFcRGPVH7RLBQ8lc+JqOt+YW92oSaSGSwHnlTmd7tg==", + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "requires": { - "@aduh95/viz.js": "^3.7.0", - "@solidity-parser/parser": "^0.16.1", - "axios": "^1.6.0", - "axios-debug-log": "^1.0.0", - "cli-color": "^2.0.3", - "commander": "^11.1.0", - "convert-svg-to-png": "^0.6.4", - "debug": "^4.3.4", - "diff-match-patch": "^1.0.5", - "ethers": "^5.7.2", - "js-graph-algorithms": "^1.0.18", - "klaw": "^4.1.0" - }, - "dependencies": { - "@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, - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true - } - } + "peer": true }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "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 + }, + "typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "dev": true, "peer": true, "requires": { - "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" + "@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" }, "dependencies": { "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "peer": true, "requires": { @@ -10779,673 +16093,486 @@ "concat-map": "0.0.1" } }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true, - "peer": true - }, "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "peer": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "peer": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "peer": true, "requires": { "graceful-fs": "^4.1.6" } }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "peer": true, "requires": { "brace-expansion": "^1.1.7" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "peer": true }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "peer": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "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==", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "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 } } }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "peer": true, "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "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==", - "dev": true, - "peer": true - } + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "typed-query-selector": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", + "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==", + "dev": true + }, + "typescript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "peer": true }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, "peer": true }, - "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==", + "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, - "requires": { - "safe-buffer": "~5.1.0" - } + "optional": true, + "peer": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "@fastify/busboy": "^2.0.0" } }, - "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==", + "undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "peer": true }, - "strip-eof": { + "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "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==", - "dev": true, - "peer": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "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==", + "utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", "dev": true, "peer": true }, - "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==", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "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 + }, + "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, - "requires": { - "has-flag": "^4.0.0" - } + "peer": true }, - "surya": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/surya/-/surya-0.4.6.tgz", - "integrity": "sha512-zaTYkRbms26cuOWu5jon5l4OsToHX7ZEflqTozXgq/XxUL3VY+tEnxT9Te2WVsA/sYgZPwcH92yQZJgljsss4g==", + "viem": { + "version": "2.47.18", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.47.18.tgz", + "integrity": "sha512-m3kr+/i8MddeY5fmB2y2v5B0vDL0x8R4v/8gai4Lh4jh8KOWlQqml7PFLtilNomoDm3mINxdA0JnYBJfknNoEg==", "dev": true, + "peer": true, "requires": { - "@solidity-parser/parser": "^0.14.1", - "c3-linearization": "^0.3.0", - "colors": "^1.4.0", - "graphviz": "0.0.9", - "sha1-file": "^1.0.4", - "treeify": "^1.1.0", - "yargs": "^11.1.1" + "@noble/curves": "1.9.1", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.2.3", + "isows": "1.0.7", + "ox": "0.14.15", + "ws": "8.18.3" }, "dependencies": { - "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, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "dev": true, + "peer": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "@noble/hashes": "1.8.0" } }, - "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==", + "@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "dev": true, - "requires": { - "locate-path": "^2.0.0" - } + "peer": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "peer": true, + "requires": {} + } + } + }, + "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, + "peer": true, + "requires": { + "@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" + }, + "dependencies": { + "@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, - "requires": { - "invert-kv": "^2.0.0" - } + "peer": true }, - "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==", + "@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, + "peer": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "peer": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "@noble/hashes": "1.4.0" } }, - "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 - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } + "peer": true }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, - "requires": { - "p-try": "^1.0.0" - } + "peer": true }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, + "peer": true, "requires": { - "p-limit": "^1.1.0" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" } }, - "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 - }, - "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 - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, + "peer": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" } }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw==", + "ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, + "peer": true, "requires": { - "camelcase": "^4.1.0" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } + "webdriver-bidi-protocol": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", + "integrity": "sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==", + "dev": true }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "iconv-lite": "0.6.3" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" } } } }, - "temp": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", - "integrity": "sha512-IsFisGgDKk7qzK9erMIkQe/XwiSUdac7z3wYOsjcLkhPBy3k1SlvLoIh2dAHIlEpgA971CgguMrx9z8fFg7tSA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "peer": true, "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "isexe": "^2.0.0" } }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, + "peer": true, "requires": { - "rimraf": "^3.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "peer": true - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "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, - "peer": true + "requires": { + "string-width": "^4.0.0" + } }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "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 }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "peer": true }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, - "peer": true + "peer": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "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, + "peer": true + } + } }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true }, - "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, - "peer": true - }, - "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "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, "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "peer": true, "requires": { - "busboy": "^1.6.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, - "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 - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "peer": true - }, - "util-deprecate": { + "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "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, - "peer": true - }, - "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==", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "requires": {} }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true, - "peer": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "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" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "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, "requires": { - "ansi-regex": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } } } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "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, - "requires": {} - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yargs-unparser": { @@ -11453,7 +16580,6 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "peer": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -11465,15 +16591,13 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true + "dev": true }, "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, - "peer": true + "dev": true } } }, @@ -11487,12 +16611,24 @@ "fd-slicer": "~1.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "peer": true + }, "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, - "peer": true + "dev": true + }, + "zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true } } } diff --git a/package.json b/package.json index cad933e..f8e1789 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,7 @@ { "scripts": { + "hardhat:compile": "npx hardhat compile", + "hardhat:test:smoke": "npx hardhat test test/hardhat/smoke.test.js", "lint:sol": "npx solium -d src", "lint:sol:fix": "npx solium -d src --fix", "lint:sol:test": "npx solium -d test", @@ -12,7 +14,9 @@ "uml:test": "npx sol2uml class test" }, "devDependencies": { - "@nomicfoundation/hardhat-foundry": "^1.0.1", + "@nomicfoundation/hardhat-foundry": "^1.2.1", + "@nomicfoundation/hardhat-toolbox": "^6.1.2", + "hardhat": "^2.28.6", "sol2uml": "^2.5.20", "surya": "^0.4.6" } diff --git a/remappings.txt b/remappings.txt index abeed5c..5f1ccf5 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,3 +1,3 @@ CMTAT/=lib/CMTAT/contracts/ RuleEngine/=lib/RuleEngine/src/ -OZ/=lib/openzeppelin-contracts/contracts/ \ No newline at end of file +@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ diff --git a/script/DeployCMTATWithBlacklistAndSanctionsList.s.sol b/script/DeployCMTATWithBlacklistAndSanctionsList.s.sol index a6bca8d..6579cf6 100644 --- a/script/DeployCMTATWithBlacklistAndSanctionsList.s.sol +++ b/script/DeployCMTATWithBlacklistAndSanctionsList.s.sol @@ -5,7 +5,7 @@ import {Script} from "forge-std/Script.sol"; import {ICMTATConstructor, CMTATStandalone} from "CMTAT/deployment/CMTATStandalone.sol"; import {IERC1643CMTAT} from "CMTAT/interfaces/tokenization/draft-IERC1643CMTAT.sol"; import {IRuleEngine} from "CMTAT/interfaces/engine/IRuleEngine.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleBlacklist} from "src/rules/validation/deployment/RuleBlacklist.sol"; import {RuleSanctionsList} from "src/rules/validation/deployment/RuleSanctionsList.sol"; import {ISanctionsList} from "src/rules/interfaces/ISanctionsList.sol"; diff --git a/script/DeployCMTATWithWhitelist.s.sol b/script/DeployCMTATWithWhitelist.s.sol index 0ffdbe9..e01f4fd 100644 --- a/script/DeployCMTATWithWhitelist.s.sol +++ b/script/DeployCMTATWithWhitelist.s.sol @@ -25,7 +25,7 @@ contract DeployCMTATWithWhitelist is Script { ICMTATConstructor.Engine memory engines = ICMTATConstructor.Engine(IRuleEngine(address(0))); token = new CMTATStandalone(forwarder, address(this), erc20Attributes, extraInformationAttributes, engines); - rule = new RuleWhitelist(admin, address(0), checkSpender); + rule = new RuleWhitelist(admin, address(0), checkSpender, false); token.setRuleEngine(IRuleEngine(address(rule))); diff --git a/src/mocks/IERC3643ComplianceFull.sol b/src/mocks/IERC3643ComplianceFull.sol new file mode 100644 index 0000000..44a1be7 --- /dev/null +++ b/src/mocks/IERC3643ComplianceFull.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MPL-2.0 +pragma solidity ^0.8.20; + +/** + * @title IERC3643ComplianceFull + * @dev Flat interface redeclaring the complete ERC-3643 ICompliance function set, + * including functions inherited by IERC3643Compliance from its parent interfaces + * (IERC3643ComplianceRead.canTransfer, IERC3643IComplianceContract.transferred). + * + * Purpose: computing the correct ERC-165 interface ID for the full ERC-3643 + * ICompliance interface via `type(IERC3643ComplianceFull).interfaceId`. + * + * Background: `type(IFoo).interfaceId` only XORs selectors defined *directly* on + * `IFoo`, not those inherited from parent interfaces. Using `type(IERC3643Compliance).interfaceId` + * would therefore miss `canTransfer` and `transferred`. This flat interface + * redeclares all eight functions so the XOR covers the full hierarchy. + * + * Do NOT use this interface as a type annotation or for casting — use the actual + * `IERC3643Compliance` (from RuleEngine) for that. + * + * Computed value: `type(IERC3643ComplianceFull).interfaceId == 0x3144991c` + */ +interface IERC3643ComplianceFull { + // From IERC3643ComplianceRead + function canTransfer(address from, address to, uint256 value) external view returns (bool isValid); + // From IERC3643IComplianceContract + function transferred(address from, address to, uint256 value) external; + // From IERC3643Compliance (directly defined) + function bindToken(address token) external; + function unbindToken(address token) external; + function isTokenBound(address token) external view returns (bool isBound); + function getTokenBound() external view returns (address token); + function created(address to, uint256 value) external; + function destroyed(address from, uint256 value) external; +} diff --git a/src/mocks/IdentityRegistryMock.sol b/src/mocks/IdentityRegistryMock.sol index c1f4349..936a26f 100644 --- a/src/mocks/IdentityRegistryMock.sol +++ b/src/mocks/IdentityRegistryMock.sol @@ -6,6 +6,10 @@ import {IIdentityRegistryVerified} from "src/rules/interfaces/IIdentityRegistry. contract IdentityRegistryMock is IIdentityRegistryVerified { mapping(address => bool) private verified; + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setVerified(address user, bool verified_) external { verified[user] = verified_; } diff --git a/src/mocks/MockERC20TransferFromFalse.sol b/src/mocks/MockERC20TransferFromFalse.sol index 9148545..96469fe 100644 --- a/src/mocks/MockERC20TransferFromFalse.sol +++ b/src/mocks/MockERC20TransferFromFalse.sol @@ -4,6 +4,10 @@ pragma solidity ^0.8.20; contract MockERC20TransferFromFalse { mapping(address => mapping(address => uint256)) private _allowances; + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setAllowance(address owner, address spender, uint256 value) external { _allowances[owner][spender] = value; } diff --git a/src/mocks/MockERC20WithTransferContext.sol b/src/mocks/MockERC20WithTransferContext.sol index aac490d..72ee311 100644 --- a/src/mocks/MockERC20WithTransferContext.sol +++ b/src/mocks/MockERC20WithTransferContext.sol @@ -1,14 +1,22 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {ERC20} from "OZ/token/ERC20/ERC20.sol"; +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {ITransferContext} from "src/rules/interfaces/ITransferContext.sol"; contract MockERC20WithTransferContext is ERC20 { ITransferContext public rule; + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setRule(address rule_) external { rule = ITransferContext(rule_); } @@ -17,19 +25,6 @@ contract MockERC20WithTransferContext is ERC20 { _mint(to, value); } - function transfer(address to, uint256 value) public virtual override returns (bool) { - bool success = super.transfer(to, value); - _notifyFungible(_msgSender(), _msgSender(), to, value); - return success; - } - - function transferFrom(address from, address to, uint256 value) public virtual override returns (bool) { - address sender = _msgSender(); - bool success = super.transferFrom(from, to, value); - _notifyFungible(sender, from, to, value); - return success; - } - function transferWithContext(address to, uint256 value, bool useFungibleContext, uint256 tokenId) external returns (bool) @@ -59,6 +54,27 @@ contract MockERC20WithTransferContext is ERC20 { return true; } + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function transfer(address to, uint256 value) public virtual override returns (bool) { + bool success = super.transfer(to, value); + _notifyFungible(_msgSender(), _msgSender(), to, value); + return success; + } + + function transferFrom(address from, address to, uint256 value) public virtual override returns (bool) { + address sender = _msgSender(); + bool success = super.transferFrom(from, to, value); + _notifyFungible(sender, from, to, value); + return success; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _notifyFungible(address sender, address from, address to, uint256 value) internal { if (address(rule) == address(0)) { return; diff --git a/src/mocks/MockERC721WithTransferContext.sol b/src/mocks/MockERC721WithTransferContext.sol index 38b0977..c6f9879 100644 --- a/src/mocks/MockERC721WithTransferContext.sol +++ b/src/mocks/MockERC721WithTransferContext.sol @@ -1,14 +1,22 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {ERC721} from "OZ/token/ERC721/ERC721.sol"; +import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import {ITransferContext} from "src/rules/interfaces/ITransferContext.sol"; contract MockERC721WithTransferContext is ERC721 { ITransferContext public rule; + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setRule(address rule_) external { rule = ITransferContext(rule_); } @@ -17,12 +25,20 @@ contract MockERC721WithTransferContext is ERC721 { _mint(to, tokenId); } + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function transferFrom(address from, address to, uint256 tokenId) public virtual override { address sender = _msgSender(); super.transferFrom(from, to, tokenId); _notifyRule(sender, from, to, tokenId); } + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _notifyRule(address sender, address from, address to, uint256 tokenId) internal { if (address(rule) == address(0)) { return; diff --git a/src/mocks/SanctionListOracle.sol b/src/mocks/SanctionListOracle.sol index b81a377..41d586d 100644 --- a/src/mocks/SanctionListOracle.sol +++ b/src/mocks/SanctionListOracle.sol @@ -6,6 +6,10 @@ import {ISanctionsList} from "src/rules/interfaces/ISanctionsList.sol"; contract SanctionListOracle is ISanctionsList { mapping(address => bool) private sanctionedAddresses; + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function addToSanctionsList(address newSanction) public { sanctionedAddresses[newSanction] = true; } diff --git a/src/mocks/TotalSupplyMock.sol b/src/mocks/TotalSupplyMock.sol index 92a6485..3b72179 100644 --- a/src/mocks/TotalSupplyMock.sol +++ b/src/mocks/TotalSupplyMock.sol @@ -4,11 +4,15 @@ pragma solidity ^0.8.20; contract TotalSupplyMock { uint256 private _totalSupply; - function totalSupply() external view returns (uint256) { - return _totalSupply; - } + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ function setTotalSupply(uint256 newTotalSupply) external { _totalSupply = newTotalSupply; } + + function totalSupply() external view returns (uint256) { + return _totalSupply; + } } diff --git a/src/mocks/harness/DeploymentCoverageHarnesses.sol b/src/mocks/harness/DeploymentCoverageHarnesses.sol index d3e3d17..3ebbc24 100644 --- a/src/mocks/harness/DeploymentCoverageHarnesses.sol +++ b/src/mocks/harness/DeploymentCoverageHarnesses.sol @@ -13,35 +13,69 @@ import {RuleWhitelistWrapperOwnable2Step} from "src/rules/validation/deployment/ import {RuleERC2980Ownable2Step} from "src/rules/validation/deployment/RuleERC2980Ownable2Step.sol"; contract RuleBlacklistHarness is RuleBlacklist { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable) RuleBlacklist(admin, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleWhitelistHarness is RuleWhitelist { - constructor(address admin, address forwarderIrrevocable, bool checkSpender_) - RuleWhitelist(admin, forwarderIrrevocable, checkSpender_) + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(address admin, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + RuleWhitelist(admin, forwarderIrrevocable, checkSpender_, allowMintBurn) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleWhitelistWrapperHarness is RuleWhitelistWrapper { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable, bool checkSpender_) RuleWhitelistWrapper(admin, forwarderIrrevocable, checkSpender_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleERC2980Harness is RuleERC2980 { - constructor(address admin, address forwarderIrrevocable) RuleERC2980(admin, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(address admin, address forwarderIrrevocable, bool allowBurn) + RuleERC2980(admin, forwarderIrrevocable, allowBurn) + {} + + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; @@ -49,45 +83,87 @@ contract RuleERC2980Harness is RuleERC2980 { } contract RuleSanctionsListHarness is RuleSanctionsList { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) RuleSanctionsList(admin, forwarderIrrevocable, sanctionContractOracle_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleBlacklistOwnable2StepHarness is RuleBlacklistOwnable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable) RuleBlacklistOwnable2Step(owner, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleWhitelistOwnable2StepHarness is RuleWhitelistOwnable2Step { - constructor(address owner, address forwarderIrrevocable, bool checkSpender_) - RuleWhitelistOwnable2Step(owner, forwarderIrrevocable, checkSpender_) + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(address owner, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + RuleWhitelistOwnable2Step(owner, forwarderIrrevocable, checkSpender_, allowMintBurn) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleWhitelistWrapperOwnable2StepHarness is RuleWhitelistWrapperOwnable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable, bool checkSpender_) RuleWhitelistWrapperOwnable2Step(owner, forwarderIrrevocable, checkSpender_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; } } contract RuleERC2980Ownable2StepHarness is RuleERC2980Ownable2Step { - constructor(address owner, address forwarderIrrevocable) RuleERC2980Ownable2Step(owner, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(address owner, address forwarderIrrevocable, bool allowBurn) + RuleERC2980Ownable2Step(owner, forwarderIrrevocable, allowBurn) + {} + + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ function exposedMsgDataLength() external view returns (uint256) { return _msgData().length; diff --git a/src/mocks/harness/RuleSanctionsListOwnable2StepHarness.sol b/src/mocks/harness/RuleSanctionsListOwnable2StepHarness.sol index 8584253..dedfac7 100644 --- a/src/mocks/harness/RuleSanctionsListOwnable2StepHarness.sol +++ b/src/mocks/harness/RuleSanctionsListOwnable2StepHarness.sol @@ -5,10 +5,18 @@ import {ISanctionsList} from "src/rules/interfaces/ISanctionsList.sol"; import {RuleSanctionsListOwnable2Step} from "src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol"; contract RuleSanctionsListOwnable2StepHarness is RuleSanctionsListOwnable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) RuleSanctionsListOwnable2Step(owner, forwarderIrrevocable, sanctionContractOracle_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgSender() external view returns (address) { return _msgSender(); } diff --git a/src/mocks/harness/RuleSpenderWhitelistHarnesses.sol b/src/mocks/harness/RuleSpenderWhitelistHarnesses.sol index a6095d9..9aa9d82 100644 --- a/src/mocks/harness/RuleSpenderWhitelistHarnesses.sol +++ b/src/mocks/harness/RuleSpenderWhitelistHarnesses.sol @@ -5,8 +5,16 @@ import {RuleSpenderWhitelist} from "src/rules/validation/deployment/RuleSpenderW import {RuleSpenderWhitelistOwnable2Step} from "src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol"; contract RuleSpenderWhitelistHarness is RuleSpenderWhitelist { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable) RuleSpenderWhitelist(admin, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgSender() external view returns (address) { return _msgSender(); } @@ -21,10 +29,18 @@ contract RuleSpenderWhitelistHarness is RuleSpenderWhitelist { } contract RuleSpenderWhitelistOwnable2StepHarness is RuleSpenderWhitelistOwnable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable) RuleSpenderWhitelistOwnable2Step(owner, forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedMsgSender() external view returns (address) { return _msgSender(); } diff --git a/src/mocks/harness/RuleWhitelistWrapperHarnessInternal.sol b/src/mocks/harness/RuleWhitelistWrapperHarnessInternal.sol index 36a74ab..c02598b 100644 --- a/src/mocks/harness/RuleWhitelistWrapperHarnessInternal.sol +++ b/src/mocks/harness/RuleWhitelistWrapperHarnessInternal.sol @@ -4,10 +4,18 @@ pragma solidity ^0.8.20; import {RuleWhitelistWrapper} from "src/rules/validation/deployment/RuleWhitelistWrapper.sol"; contract RuleWhitelistWrapperHarnessInternal is RuleWhitelistWrapper { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable, bool checkSpender_) RuleWhitelistWrapper(admin, forwarderIrrevocable, checkSpender_) {} + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function exposedTransferredSpenderInternal(address spender, address from, address to, uint256 value) external view { _transferred(spender, from, to, value); } diff --git a/src/modules/AccessControlModuleStandalone.sol b/src/modules/AccessControlModuleStandalone.sol index 9c5a706..9c757f4 100644 --- a/src/modules/AccessControlModuleStandalone.sol +++ b/src/modules/AccessControlModuleStandalone.sol @@ -3,13 +3,17 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import {AccessControl} from "OZ/access/AccessControl.sol"; -import {IAccessControl} from "OZ/access/IAccessControl.sol"; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; abstract contract AccessControlModuleStandalone is AccessControlEnumerable { error AccessControlModuleStandalone_AddressZeroNotAllowed(); - /* ============ Constructor ============ */ + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + /** * @notice Assigns the provided address as the default admin. * @dev @@ -20,7 +24,6 @@ abstract contract AccessControlModuleStandalone is AccessControlEnumerable { * * @param admin The address that will receive the `DEFAULT_ADMIN_ROLE`. */ - constructor(address admin) { require(admin != address(0), AccessControlModuleStandalone_AddressZeroNotAllowed()); // we don't check the return value @@ -30,8 +33,9 @@ abstract contract AccessControlModuleStandalone is AccessControlEnumerable { } /*////////////////////////////////////////////////////////////// - PUBLIC/EXTERNAL FUNCTIONS + PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////*/ + /** * @dev Returns `true` if `account` has been granted `role`. */ diff --git a/src/modules/MetaTxModuleStandalone.sol b/src/modules/MetaTxModuleStandalone.sol index 88c1df5..9902688 100644 --- a/src/modules/MetaTxModuleStandalone.sol +++ b/src/modules/MetaTxModuleStandalone.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; -import {ERC2771Context} from "OZ/metatx/ERC2771Context.sol"; +import {ERC2771Context} from "@openzeppelin/contracts/metatx/ERC2771Context.sol"; /** * @dev Meta transaction (gasless) module. diff --git a/src/modules/VersionModule.sol b/src/modules/VersionModule.sol index 0ae2ee1..8da4a78 100644 --- a/src/modules/VersionModule.sol +++ b/src/modules/VersionModule.sol @@ -8,7 +8,11 @@ import {IERC3643Version} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol * @notice Exposes the contract version as required by ERC-3643. */ abstract contract VersionModule is IERC3643Version { - string private constant VERSION = "0.2.0"; + string private constant VERSION = "0.3.0"; + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /// @inheritdoc IERC3643Version function version() public view virtual override returns (string memory version_) { diff --git a/src/rules/operation/RuleConditionalTransferLight.sol b/src/rules/operation/RuleConditionalTransferLight.sol index 1d16d00..787427a 100644 --- a/src/rules/operation/RuleConditionalTransferLight.sol +++ b/src/rules/operation/RuleConditionalTransferLight.sol @@ -1,12 +1,14 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {IERC165} from "OZ/utils/introspection/IERC165.sol"; -import {IRule} from "RuleEngine/interfaces/IRule.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; +import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; +import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; +import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; +import {IERC3643ComplianceFull} from "../../mocks/IERC3643ComplianceFull.sol"; import {AccessControlModuleStandalone} from "../../modules/AccessControlModuleStandalone.sol"; -import {ERC3643ComplianceModule} from "RuleEngine/modules/ERC3643ComplianceModule.sol"; import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; /** @@ -14,16 +16,20 @@ import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransf * @dev Requires operator approval for each transfer. Same transfer (from, to, value) * can be approved multiple times to allow repeated transfers. */ -contract RuleConditionalTransferLight is - AccessControlModuleStandalone, - ERC3643ComplianceModule, - RuleConditionalTransferLightBase -{ +contract RuleConditionalTransferLight is AccessControlModuleStandalone, RuleConditionalTransferLightBase { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + /** * @param admin Address of the contract admin. */ constructor(address admin) AccessControlModuleStandalone(admin) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view @@ -31,23 +37,19 @@ contract RuleConditionalTransferLight is override(AccessControlEnumerable, IERC165) returns (bool) { - return interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID || interfaceId == type(IRule).interfaceId + return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643ComplianceFull).interfaceId || AccessControlEnumerable.supportsInterface(interfaceId); } - function created(address to, uint256 value) external onlyBoundToken { - _transferred(address(0), to, value); - } - - function destroyed(address from, uint256 value) external onlyBoundToken { - _transferred(from, address(0), value); - } + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ function _authorizeTransferApproval() internal view virtual override onlyRole(OPERATOR_ROLE) {} - function _authorizeTransferExecution() internal view virtual override { - require(isTokenBound(_msgSender()), RuleConditionalTransferLight_TransferExecutorUnauthorized(_msgSender())); - } - function _onlyComplianceManager() internal virtual override onlyRole(COMPLIANCE_MANAGER_ROLE) {} } diff --git a/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol b/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol index 6fcf88f..0ba8e65 100644 --- a/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol +++ b/src/rules/operation/RuleConditionalTransferLightOwnable2Step.sol @@ -1,11 +1,14 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {IRule} from "RuleEngine/interfaces/IRule.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; -import {IERC165} from "OZ/utils/introspection/IERC165.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; +import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; +import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; +import {IERC3643ComplianceFull} from "../../mocks/IERC3643ComplianceFull.sol"; import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransferLightBase.sol"; /** @@ -13,14 +16,30 @@ import {RuleConditionalTransferLightBase} from "./abstract/RuleConditionalTransf * @notice Ownable2Step variant of RuleConditionalTransferLight. */ contract RuleConditionalTransferLightOwnable2Step is RuleConditionalTransferLightBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view override returns (bool) { - return interfaceId == type(IERC165).interfaceId || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID - || interfaceId == type(IRule).interfaceId; + return interfaceId == type(IERC165).interfaceId + || interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643ComplianceFull).interfaceId; } + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeTransferApproval() internal view virtual override onlyOwner {} - function _authorizeTransferExecution() internal view virtual override onlyOwner {} + function _onlyComplianceManager() internal virtual override onlyOwner {} } diff --git a/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol b/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol new file mode 100644 index 0000000..83b4b3b --- /dev/null +++ b/src/rules/operation/abstract/RuleConditionalTransferLightApprovalBase.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MPL-2.0 +pragma solidity ^0.8.20; + +import {ITransferContext} from "../../interfaces/ITransferContext.sol"; +import {RuleConditionalTransferLightInvariantStorage} from "./RuleConditionalTransferLightInvariantStorage.sol"; + +/** + * @title RuleConditionalTransferLightApprovalBase + * @dev Pure approval state machine: stores and consumes per-transfer approvals. + * No knowledge of token binding or compliance interfaces. + */ +abstract contract RuleConditionalTransferLightApprovalBase is RuleConditionalTransferLightInvariantStorage { + // Mapping from transfer hash to approval count + mapping(bytes32 => uint256) public approvalCounts; + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyTransferApprover() { + _authorizeTransferApproval(); + _; + } + + modifier onlyTransferExecutor() { + _authorizeTransferExecution(); + _; + } + + function _authorizeTransferApproval() internal view virtual; + + function _authorizeTransferExecution() internal view virtual; + + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function transferred(ITransferContext.FungibleTransferContext calldata ctx) external onlyTransferExecutor { + _transferredFromContext(ctx); + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function approveTransfer(address from, address to, uint256 value) public onlyTransferApprover { + bytes32 transferHash = _transferHash(from, to, value); + approvalCounts[transferHash] += 1; + emit TransferApproved(from, to, value, approvalCounts[transferHash]); + } + + function cancelTransferApproval(address from, address to, uint256 value) public onlyTransferApprover { + bytes32 transferHash = _transferHash(from, to, value); + uint256 count = approvalCounts[transferHash]; + require(count != 0, TransferApprovalNotFound()); + approvalCounts[transferHash] = count - 1; + emit TransferApprovalCancelled(from, to, value, approvalCounts[transferHash]); + } + + function approvedCount(address from, address to, uint256 value) public view returns (uint256) { + bytes32 transferHash = _transferHash(from, to, value); + return approvalCounts[transferHash]; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function _transferredFromContext(ITransferContext.FungibleTransferContext calldata ctx) internal virtual { + _transferred(ctx.from, ctx.to, ctx.value); + } + + function _transferred(address from, address to, uint256 value) internal virtual { + if (from == address(0) || to == address(0)) { + return; + } + bytes32 transferHash = _transferHash(from, to, value); + uint256 count = approvalCounts[transferHash]; + + require(count != 0, TransferNotApproved()); + + approvalCounts[transferHash] = count - 1; + emit TransferExecuted(from, to, value, approvalCounts[transferHash]); + } + + function _transferHash(address from, address to, uint256 value) internal pure virtual returns (bytes32 hash) { + // Linter suggestion (`asm-keccak256`): hash packed values in assembly to avoid abi.encodePacked overhead. + assembly ("memory-safe") { + let ptr := mload(0x40) + mstore(ptr, shl(96, from)) + mstore(add(ptr, 0x20), shl(96, to)) + mstore(add(ptr, 0x40), value) + hash := keccak256(ptr, 0x60) + } + } +} diff --git a/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol b/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol index 3b0a9cb..7b2bfca 100644 --- a/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol +++ b/src/rules/operation/abstract/RuleConditionalTransferLightBase.sol @@ -6,66 +6,80 @@ import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC import {IERC3643ComplianceRead, IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; import {IRule} from "RuleEngine/interfaces/IRule.sol"; -import {ITransferContext} from "../../interfaces/ITransferContext.sol"; -import {IERC20} from "OZ/token/ERC20/IERC20.sol"; -import {RuleConditionalTransferLightInvariantStorage} from "./RuleConditionalTransferLightInvariantStorage.sol"; +import {ERC3643ComplianceModule} from "RuleEngine/modules/ERC3643ComplianceModule.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {RuleConditionalTransferLightApprovalBase} from "./RuleConditionalTransferLightApprovalBase.sol"; import {VersionModule} from "../../../modules/VersionModule.sol"; /** * @title RuleConditionalTransferLightBase - * @dev Requires operator approval for each transfer. Same transfer (from, to, value) - * can be approved multiple times to allow repeated transfers. + * @dev Wires the approval state machine into the ERC-3643 / ERC-1404 / IRule compliance + * interface layer and enforces single-token binding. */ abstract contract RuleConditionalTransferLightBase is VersionModule, - RuleConditionalTransferLightInvariantStorage, + ERC3643ComplianceModule, + RuleConditionalTransferLightApprovalBase, IRule { - // Mapping from transfer hash to approval count - mapping(bytes32 => uint256) public approvalCounts; + using SafeERC20 for IERC20; - function approveTransfer(address from, address to, uint256 value) public onlyTransferApprover { - bytes32 transferHash = _transferHash(from, to, value); - approvalCounts[transferHash] += 1; - emit TransferApproved(from, to, value, approvalCounts[transferHash]); + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { + return restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED; } - function cancelTransferApproval(address from, address to, uint256 value) public onlyTransferApprover { - bytes32 transferHash = _transferHash(from, to, value); - uint256 count = approvalCounts[transferHash]; - require(count != 0, TransferApprovalNotFound()); - approvalCounts[transferHash] = count - 1; - emit TransferApprovalCancelled(from, to, value, approvalCounts[transferHash]); + function messageForTransferRestriction(uint8 restrictionCode) + external + pure + override(IERC1404) + returns (string memory) + { + if (restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED) { + return TEXT_TRANSFER_REQUEST_NOT_APPROVED; + } + return TEXT_CODE_NOT_FOUND; } + function created(address to, uint256 value) external onlyBoundToken { + _transferred(address(0), to, value); + } + + function destroyed(address from, uint256 value) external onlyBoundToken { + _transferred(from, address(0), value); + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** * @notice Approves and performs a transferFrom using this rule as spender. * @dev Requires `from` to have approved this contract on the token. * @dev This function is only safe for tokens that call back `transferred()` during transfer. * @dev CEI is intentionally inverted so the approval exists for the callback. */ - function approveAndTransferIfAllowed(address token, address from, address to, uint256 value) + function approveAndTransferIfAllowed(address from, address to, uint256 value) public onlyTransferApprover returns (bool) { - require(token != address(0), RuleConditionalTransferLight_TokenAddressZeroNotAllowed()); + address token = getTokenBound(); + require(token != address(0), RuleConditionalTransferLight_TokenNotBound()); approveTransfer(from, to, value); uint256 allowed = IERC20(token).allowance(from, address(this)); require(allowed >= value, RuleConditionalTransferLight_InsufficientAllowance(token, from, allowed, value)); - bool success = IERC20(token).transferFrom(from, to, value); - require(success, RuleConditionalTransferLight_TransferFailed()); + IERC20(token).safeTransferFrom(from, to, value); return true; } - function approvedCount(address from, address to, uint256 value) public view returns (uint256) { - bytes32 transferHash = _transferHash(from, to, value); - return approvalCounts[transferHash]; - } - function transferred(address from, address to, uint256 value) public override(IERC3643IComplianceContract) @@ -88,6 +102,20 @@ abstract contract RuleConditionalTransferLightBase is _transferred(from, to, value); } + /** + * @notice Binds a token to this rule. Reverts if a token is already bound. + * @dev Enforces single-token binding to prevent cross-token approval replay. + * To migrate to a new token, call `unbindToken` first. + * @dev WARNING: `unbindToken` does not clear `approvalCounts`. Stale approvals + * from the previous token remain in storage and can be consumed after rebinding. + * The operator who controls rebinding also controls approvals, so the trust + * model is preserved, but integrators should be aware of this behavior. + */ + function bindToken(address token) public override onlyComplianceManager { + require(getTokenBound() == address(0), RuleConditionalTransferLight_TokenAlreadyBound()); + _bindToken(token); + } + function detectTransferRestriction(address from, address to, uint256 value) public view @@ -138,69 +166,11 @@ abstract contract RuleConditionalTransferLightBase is == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } - function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { - return restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED; - } - - function messageForTransferRestriction(uint8 restrictionCode) - external - pure - override(IERC1404) - returns (string memory) - { - if (restrictionCode == CODE_TRANSFER_REQUEST_NOT_APPROVED) { - return TEXT_TRANSFER_REQUEST_NOT_APPROVED; - } - return TEXT_CODE_NOT_FOUND; - } - - function transferred(ITransferContext.FungibleTransferContext calldata ctx) external onlyTransferExecutor { - _transferredFromContext(ctx); - } - - function _transferredFromContext(ITransferContext.FungibleTransferContext calldata ctx) internal virtual { - _transferred(ctx.from, ctx.to, ctx.value); - } - - function _transferred(address from, address to, uint256 value) internal virtual { - if (from == address(0) || to == address(0)) { - return; - } - bytes32 transferHash = _transferHash(from, to, value); - uint256 count = approvalCounts[transferHash]; - - require(count != 0, TransferNotApproved()); - - approvalCounts[transferHash] = count - 1; - emit TransferExecuted(from, to, value, approvalCounts[transferHash]); - } - - function _transferHash(address from, address to, uint256 value) internal pure virtual returns (bytes32 hash) { - // Linter suggestion (`asm-keccak256`): hash packed values in assembly to avoid abi.encodePacked overhead. - assembly ("memory-safe") { - let ptr := mload(0x40) - mstore(ptr, shl(96, from)) - mstore(add(ptr, 0x20), shl(96, to)) - mstore(add(ptr, 0x40), value) - hash := keccak256(ptr, 0x60) - } - } - /*////////////////////////////////////////////////////////////// ACCESS CONTROL //////////////////////////////////////////////////////////////*/ - modifier onlyTransferApprover() { - _authorizeTransferApproval(); - _; + function _authorizeTransferExecution() internal view override { + require(isTokenBound(_msgSender()), RuleConditionalTransferLight_TransferExecutorUnauthorized(_msgSender())); } - - modifier onlyTransferExecutor() { - _authorizeTransferExecution(); - _; - } - - function _authorizeTransferApproval() internal view virtual; - - function _authorizeTransferExecution() internal view virtual; } diff --git a/src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol b/src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol index 83639b2..61aed67 100644 --- a/src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol +++ b/src/rules/operation/abstract/RuleConditionalTransferLightInvariantStorage.sol @@ -12,18 +12,18 @@ abstract contract RuleConditionalTransferLightInvariantStorage is RuleSharedInva // It is very important that each rule uses an unique code uint8 public constant CODE_TRANSFER_REQUEST_NOT_APPROVED = 46; + /* ============ Events ============ */ + event TransferApproved(address indexed from, address indexed to, uint256 value, uint256 count); + event TransferExecuted(address indexed from, address indexed to, uint256 value, uint256 remaining); + event TransferApprovalCancelled(address indexed from, address indexed to, uint256 value, uint256 remaining); + /* ============ Custom error ============ */ error RuleConditionalTransferLight_TransferExecutorUnauthorized(address account); - error RuleConditionalTransferLight_TokenAddressZeroNotAllowed(); + error RuleConditionalTransferLight_TokenNotBound(); + error RuleConditionalTransferLight_TokenAlreadyBound(); error RuleConditionalTransferLight_InsufficientAllowance( address token, address owner, uint256 allowance, uint256 required ); - error RuleConditionalTransferLight_TransferFailed(); error TransferNotApproved(); error TransferApprovalNotFound(); - - /* ============ Events ============ */ - event TransferApproved(address indexed from, address indexed to, uint256 value, uint256 count); - event TransferExecuted(address indexed from, address indexed to, uint256 value, uint256 remaining); - event TransferApprovalCancelled(address indexed from, address indexed to, uint256 value, uint256 remaining); } diff --git a/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol b/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol index 40e6e71..a183d2e 100644 --- a/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol +++ b/src/rules/validation/abstract/RuleAddressSet/RuleAddressSet.sol @@ -23,10 +23,6 @@ abstract contract RuleAddressSet is RuleAddressSetInvariantStorage, IAddressList { - /*////////////////////////////////////////////////////////////// - STATE - //////////////////////////////////////////////////////////////*/ - /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ @@ -38,7 +34,25 @@ abstract contract RuleAddressSet is constructor(address forwarderIrrevocable) MetaTxModuleStandalone(forwarderIrrevocable) {} /*////////////////////////////////////////////////////////////// - CORE LOGIC + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyAddressListAdd() { + _authorizeAddressListAdd(); + _; + } + + modifier onlyAddressListRemove() { + _authorizeAddressListRemove(); + _; + } + + function _authorizeAddressListAdd() internal view virtual; + + function _authorizeAddressListRemove() internal view virtual; + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////*/ /** @@ -91,24 +105,6 @@ abstract contract RuleAddressSet is emit RemoveAddress(targetAddress); } - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlyAddressListAdd() { - _authorizeAddressListAdd(); - _; - } - - modifier onlyAddressListRemove() { - _authorizeAddressListRemove(); - _; - } - - function _authorizeAddressListAdd() internal view virtual; - - function _authorizeAddressListRemove() internal view virtual; - /** * @notice Returns the total number of currently listed addresses. * @return count The number of listed addresses. @@ -148,7 +144,7 @@ abstract contract RuleAddressSet is } /*////////////////////////////////////////////////////////////// - ERC-2771 META TX + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /// @inheritdoc ERC2771Context diff --git a/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol b/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol index 7ff5ae9..7fae61d 100644 --- a/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol +++ b/src/rules/validation/abstract/RuleAddressSet/RuleAddressSetInternal.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import {EnumerableSet} from "OZ/utils/structs/EnumerableSet.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; /** * @title Rule Address Set (Internal) @@ -23,7 +23,7 @@ abstract contract RuleAddressSetInternal { EnumerableSet.AddressSet private _listedAddresses; /*////////////////////////////////////////////////////////////// - INTERNAL + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ /** diff --git a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol index 5d1a8a9..d31478e 100644 --- a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol +++ b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleAddressSetInvariantStorage.sol @@ -3,14 +3,14 @@ pragma solidity ^0.8.20; abstract contract RuleAddressSetInvariantStorage { + /* ============ Role ============ */ + bytes32 public constant ADDRESS_LIST_REMOVE_ROLE = keccak256("ADDRESS_LIST_REMOVE_ROLE"); + bytes32 public constant ADDRESS_LIST_ADD_ROLE = keccak256("ADDRESS_LIST_ADD_ROLE"); + /* ============ Custom errors ============ */ /// @notice Thrown when trying to add an address that is already listed. error RuleAddressSet_AddressAlreadyListed(); /// @notice Thrown when trying to remove an address that is not listed. error RuleAddressSet_AddressNotFound(); - - /* ============ Role ============ */ - bytes32 public constant ADDRESS_LIST_REMOVE_ROLE = keccak256("ADDRESS_LIST_REMOVE_ROLE"); - bytes32 public constant ADDRESS_LIST_ADD_ROLE = keccak256("ADDRESS_LIST_ADD_ROLE"); } diff --git a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol index 02fa84a..a356e7b 100644 --- a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol +++ b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleBlacklistInvariantStorage.sol @@ -5,12 +5,7 @@ pragma solidity ^0.8.20; import {RuleSharedInvariantStorage} from "../../invariant/RuleSharedInvariantStorage.sol"; abstract contract RuleBlacklistInvariantStorage is RuleSharedInvariantStorage { - error RuleBlacklist_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleBlacklist_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); /* ============ String message ============ */ - string constant TEXT_ADDRESS_FROM_IS_BLACKLISTED = "The sender is blacklisted"; string constant TEXT_ADDRESS_TO_IS_BLACKLISTED = "The recipient is blacklisted"; string constant TEXT_ADDRESS_SPENDER_IS_BLACKLISTED = "The spender is blacklisted"; @@ -20,4 +15,9 @@ abstract contract RuleBlacklistInvariantStorage is RuleSharedInvariantStorage { uint8 public constant CODE_ADDRESS_FROM_IS_BLACKLISTED = 36; uint8 public constant CODE_ADDRESS_TO_IS_BLACKLISTED = 37; uint8 public constant CODE_ADDRESS_SPENDER_IS_BLACKLISTED = 38; + + error RuleBlacklist_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleBlacklist_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); } diff --git a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol index eed9da1..59fc65f 100644 --- a/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol +++ b/src/rules/validation/abstract/RuleAddressSet/invariantStorage/RuleWhitelistInvariantStorage.sol @@ -5,12 +5,7 @@ pragma solidity ^0.8.20; import {RuleSharedInvariantStorage} from "../../invariant/RuleSharedInvariantStorage.sol"; abstract contract RuleWhitelistInvariantStorage is RuleSharedInvariantStorage { - error RuleWhitelist_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleWhitelist_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); /* ============ String message ============ */ - string constant TEXT_ADDRESS_FROM_NOT_WHITELISTED = "The sender is not in the whitelist"; string constant TEXT_ADDRESS_TO_NOT_WHITELISTED = "The recipient is not in the whitelist"; string constant TEXT_ADDRESS_SPENDER_NOT_WHITELISTED = "The spender is not in the whitelist"; @@ -24,4 +19,9 @@ abstract contract RuleWhitelistInvariantStorage is RuleSharedInvariantStorage { /* ============ Events ============ */ /// @dev Emitted when the `checkSpender` flag is updated. event CheckSpenderUpdated(bool newValue); + + error RuleWhitelist_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleWhitelist_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); } diff --git a/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol b/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol index b2d4e8d..2f5890a 100644 --- a/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol +++ b/src/rules/validation/abstract/RuleERC2980/RuleERC2980Internal.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import {EnumerableSet} from "OZ/utils/structs/EnumerableSet.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; /** * @title RuleERC2980Internal diff --git a/src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol b/src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol index 8160ff8..0de56e5 100644 --- a/src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol +++ b/src/rules/validation/abstract/RuleERC2980/invariantStorage/RuleERC2980InvariantStorage.sol @@ -4,14 +4,6 @@ pragma solidity ^0.8.20; import {RuleSharedInvariantStorage} from "../../invariant/RuleSharedInvariantStorage.sol"; abstract contract RuleERC2980InvariantStorage is RuleSharedInvariantStorage { - /* ============ Custom errors ============ */ - error RuleERC2980_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleERC2980_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); - error RuleERC2980_AddressAlreadyListed(); - error RuleERC2980_AddressNotFound(); - /* ============ String message ============ */ string constant TEXT_ADDRESS_FROM_IS_FROZEN = "The sender address is frozen"; string constant TEXT_ADDRESS_TO_IS_FROZEN = "The recipient address is frozen"; @@ -49,4 +41,12 @@ abstract contract RuleERC2980InvariantStorage is RuleSharedInvariantStorage { event AddFrozenlistAddress(address indexed targetAddress); /// @notice Emitted when a single address is removed from the frozenlist. event RemoveFrozenlistAddress(address indexed targetAddress); + + /* ============ Custom errors ============ */ + error RuleERC2980_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleERC2980_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); + error RuleERC2980_AddressAlreadyListed(); + error RuleERC2980_AddressNotFound(); } diff --git a/src/rules/validation/abstract/base/RuleBlacklistBase.sol b/src/rules/validation/abstract/base/RuleBlacklistBase.sol index 9e6d32c..e066d95 100644 --- a/src/rules/validation/abstract/base/RuleBlacklistBase.sol +++ b/src/rules/validation/abstract/base/RuleBlacklistBase.sol @@ -15,36 +15,40 @@ import {IRule} from "RuleEngine/interfaces/IRule.sol"; * @notice Core blacklist logic without access-control policy. */ abstract contract RuleBlacklistBase is RuleAddressSet, RuleNFTAdapter, RuleBlacklistInvariantStorage { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} - function _detectTransferRestriction( - address from, - address to, - uint256 /* value */ - ) - internal + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @inheritdoc IERC3643IComplianceContract + * @dev Validation only; does not modify state. + */ + function transferred(address from, address to, uint256 value) + public view - override - returns (uint8) + virtual + override(IERC3643IComplianceContract) { - if (isAddressListed(from)) { - return CODE_ADDRESS_FROM_IS_BLACKLISTED; - } else if (isAddressListed(to)) { - return CODE_ADDRESS_TO_IS_BLACKLISTED; - } - return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + _transferred(from, to, value); } - function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - internal + /** + * @inheritdoc IRuleEngine + * @dev Validation only; does not modify state. + */ + function transferred(address spender, address from, address to, uint256 value) + public view - override - returns (uint8) + virtual + override(IRuleEngine) { - if (isAddressListed(spender)) { - return CODE_ADDRESS_SPENDER_IS_BLACKLISTED; - } - return _detectTransferRestriction(from, to, value); + _transferredFrom(spender, from, to, value); } function canReturnTransferRestrictionCode(uint8 restrictionCode) @@ -80,30 +84,38 @@ abstract contract RuleBlacklistBase is RuleAddressSet, RuleNFTAdapter, RuleBlack return RuleTransferValidation.supportsInterface(interfaceId); } - /** - * @inheritdoc IERC3643IComplianceContract - * @dev Validation only; does not modify state. - */ - function transferred(address from, address to, uint256 value) - public + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function _detectTransferRestriction( + address from, + address to, + uint256 /* value */ + ) + internal view - virtual - override(IERC3643IComplianceContract) + override + returns (uint8) { - _transferred(from, to, value); + if (isAddressListed(from)) { + return CODE_ADDRESS_FROM_IS_BLACKLISTED; + } else if (isAddressListed(to)) { + return CODE_ADDRESS_TO_IS_BLACKLISTED; + } + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } - /** - * @inheritdoc IRuleEngine - * @dev Validation only; does not modify state. - */ - function transferred(address spender, address from, address to, uint256 value) - public + function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + internal view - virtual - override(IRuleEngine) + override + returns (uint8) { - _transferredFrom(spender, from, to, value); + if (isAddressListed(spender)) { + return CODE_ADDRESS_SPENDER_IS_BLACKLISTED; + } + return _detectTransferRestriction(from, to, value); } function _transferred(address from, address to, uint256 value) internal view virtual override { diff --git a/src/rules/validation/abstract/base/RuleERC2980Base.sol b/src/rules/validation/abstract/base/RuleERC2980Base.sol index 247e64f..1061824 100644 --- a/src/rules/validation/abstract/base/RuleERC2980Base.sol +++ b/src/rules/validation/abstract/base/RuleERC2980Base.sol @@ -38,121 +38,41 @@ abstract contract RuleERC2980Base is CONSTRUCTOR //////////////////////////////////////////////////////////////*/ - constructor(address forwarderIrrevocable) MetaTxModuleStandalone(forwarderIrrevocable) {} - - /*////////////////////////////////////////////////////////////// - TRANSFER RESTRICTION LOGIC - //////////////////////////////////////////////////////////////*/ - - function _detectTransferRestriction( - address from, - address to, - uint256 /* value */ - ) - internal - view - virtual - override - returns (uint8) - { - // Frozenlist check has priority - if (_isFrozen(from)) { - return CODE_ADDRESS_FROM_IS_FROZEN; - } else if (_isFrozen(to)) { - return CODE_ADDRESS_TO_IS_FROZEN; + constructor(address forwarderIrrevocable, bool allowBurn) MetaTxModuleStandalone(forwarderIrrevocable) { + if (allowBurn) { + _addWhitelistAddress(address(0)); + emit AddWhitelistAddress(address(0)); } - // Whitelist check: only the recipient must be whitelisted - if (!_isWhitelisted(to)) { - return CODE_ADDRESS_TO_NOT_WHITELISTED; - } - return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - } - - function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - internal - view - virtual - override - returns (uint8) - { - if (_isFrozen(spender)) { - return CODE_ADDRESS_SPENDER_IS_FROZEN; - } - return _detectTransferRestriction(from, to, value); } /*////////////////////////////////////////////////////////////// - ERC-3643 / IRuleEngine HOOKS + ACCESS CONTROL //////////////////////////////////////////////////////////////*/ - function transferred(address from, address to, uint256 value) - public - view - virtual - override(IERC3643IComplianceContract) - { - _transferred(from, to, value); - } - - function transferred(address spender, address from, address to, uint256 value) - public - view - virtual - override(IRuleEngine) - { - _transferredFrom(spender, from, to, value); + modifier onlyWhitelistAdd() { + _authorizeWhitelistAdd(); + _; } - function _transferred(address from, address to, uint256 value) internal view virtual override { - uint8 code = _detectTransferRestriction(from, to, value); - require( - code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - RuleERC2980_InvalidTransfer(address(this), from, to, value, code) - ); + modifier onlyWhitelistRemove() { + _authorizeWhitelistRemove(); + _; } - function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { - uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); - require( - code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), - RuleERC2980_InvalidTransferFrom(address(this), spender, from, to, value, code) - ); + modifier onlyFrozenlistAdd() { + _authorizeFrozenlistAdd(); + _; } - /*////////////////////////////////////////////////////////////// - RESTRICTION CODE HELPERS - //////////////////////////////////////////////////////////////*/ - - function canReturnTransferRestrictionCode(uint8 restrictionCode) - public - pure - virtual - override(IRule) - returns (bool) - { - return restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_IS_FROZEN - || restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED; + modifier onlyFrozenlistRemove() { + _authorizeFrozenlistRemove(); + _; } - function messageForTransferRestriction(uint8 restrictionCode) - public - pure - virtual - override(IERC1404) - returns (string memory) - { - if (restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN) { - return TEXT_ADDRESS_FROM_IS_FROZEN; - } else if (restrictionCode == CODE_ADDRESS_TO_IS_FROZEN) { - return TEXT_ADDRESS_TO_IS_FROZEN; - } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN) { - return TEXT_ADDRESS_SPENDER_IS_FROZEN; - } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { - return TEXT_ADDRESS_TO_NOT_WHITELISTED; - } else { - return TEXT_CODE_NOT_FOUND; - } - } + function _authorizeWhitelistAdd() internal view virtual; + function _authorizeWhitelistRemove() internal view virtual; + function _authorizeFrozenlistAdd() internal view virtual; + function _authorizeFrozenlistRemove() internal view virtual; /*////////////////////////////////////////////////////////////// WHITELIST MANAGEMENT @@ -204,46 +124,6 @@ abstract contract RuleERC2980Base is emit RemoveWhitelistAddress(targetAddress); } - /** - * @notice Returns the number of whitelisted addresses. - */ - function whitelistAddressCount() public view returns (uint256) { - return _whitelistCount(); - } - - /** - * @notice Returns true if the address is in the whitelist. - */ - function isWhitelisted(address targetAddress) public view returns (bool) { - return _isWhitelisted(targetAddress); - } - - /** - * @notice ERC-2980 getter: returns true if the address is whitelisted. - */ - function whitelist(address _operator) public view virtual override(IERC2980) returns (bool) { - return _isWhitelisted(_operator); - } - - /** - * @notice Returns true if the address is whitelisted (identity-verified). - * @dev Reflects whitelist membership only. Frozen status is intentionally excluded: - * freezing is a temporary enforcement action and does not revoke identity verification. - */ - function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { - return _isWhitelisted(targetAddress); - } - - /** - * @notice Checks multiple addresses for whitelist membership. - */ - function areWhitelisted(address[] memory targetAddresses) public view returns (bool[] memory results) { - results = new bool[](targetAddresses.length); - for (uint256 i = 0; i < targetAddresses.length; ++i) { - results[i] = _isWhitelisted(targetAddresses[i]); - } - } - /*////////////////////////////////////////////////////////////// FROZENLIST MANAGEMENT //////////////////////////////////////////////////////////////*/ @@ -294,6 +174,103 @@ abstract contract RuleERC2980Base is emit RemoveFrozenlistAddress(targetAddress); } + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function transferred(address from, address to, uint256 value) + public + view + virtual + override(IERC3643IComplianceContract) + { + _transferred(from, to, value); + } + + function transferred(address spender, address from, address to, uint256 value) + public + view + virtual + override(IRuleEngine) + { + _transferredFrom(spender, from, to, value); + } + + function canReturnTransferRestrictionCode(uint8 restrictionCode) + public + pure + virtual + override(IRule) + returns (bool) + { + return restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_IS_FROZEN + || restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN || restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED; + } + + function messageForTransferRestriction(uint8 restrictionCode) + public + pure + virtual + override(IERC1404) + returns (string memory) + { + if (restrictionCode == CODE_ADDRESS_FROM_IS_FROZEN) { + return TEXT_ADDRESS_FROM_IS_FROZEN; + } else if (restrictionCode == CODE_ADDRESS_TO_IS_FROZEN) { + return TEXT_ADDRESS_TO_IS_FROZEN; + } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_FROZEN) { + return TEXT_ADDRESS_SPENDER_IS_FROZEN; + } else if (restrictionCode == CODE_ADDRESS_TO_NOT_WHITELISTED) { + return TEXT_ADDRESS_TO_NOT_WHITELISTED; + } else { + return TEXT_CODE_NOT_FOUND; + } + } + + function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { + return RuleTransferValidation.supportsInterface(interfaceId); + } + + /** + * @notice Returns the number of whitelisted addresses. + */ + function whitelistAddressCount() public view returns (uint256) { + return _whitelistCount(); + } + + /** + * @notice Returns true if the address is in the whitelist. + */ + function isWhitelisted(address targetAddress) public view returns (bool) { + return _isWhitelisted(targetAddress); + } + + /** + * @notice ERC-2980 getter: returns true if the address is whitelisted. + */ + function whitelist(address _operator) public view virtual override(IERC2980) returns (bool) { + return _isWhitelisted(_operator); + } + + /** + * @notice Returns true if the address is whitelisted (identity-verified). + * @dev Reflects whitelist membership only. Frozen status is intentionally excluded: + * freezing is a temporary enforcement action and does not revoke identity verification. + */ + function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { + return _isWhitelisted(targetAddress); + } + + /** + * @notice Checks multiple addresses for whitelist membership. + */ + function areWhitelisted(address[] memory targetAddresses) public view returns (bool[] memory results) { + results = new bool[](targetAddresses.length); + for (uint256 i = 0; i < targetAddresses.length; ++i) { + results[i] = _isWhitelisted(targetAddresses[i]); + } + } + /** * @notice Returns the number of frozen addresses. */ @@ -326,46 +303,62 @@ abstract contract RuleERC2980Base is } /*////////////////////////////////////////////////////////////// - INTERFACE SUPPORT - //////////////////////////////////////////////////////////////*/ - - function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { - return RuleTransferValidation.supportsInterface(interfaceId); - } - - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ - modifier onlyWhitelistAdd() { - _authorizeWhitelistAdd(); - _; + function _detectTransferRestriction( + address from, + address to, + uint256 /* value */ + ) + internal + view + virtual + override + returns (uint8) + { + // Frozenlist check has priority + if (_isFrozen(from)) { + return CODE_ADDRESS_FROM_IS_FROZEN; + } else if (_isFrozen(to)) { + return CODE_ADDRESS_TO_IS_FROZEN; + } + // Whitelist check: only the recipient must be whitelisted + if (!_isWhitelisted(to)) { + return CODE_ADDRESS_TO_NOT_WHITELISTED; + } + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } - modifier onlyWhitelistRemove() { - _authorizeWhitelistRemove(); - _; + function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + internal + view + virtual + override + returns (uint8) + { + if (_isFrozen(spender)) { + return CODE_ADDRESS_SPENDER_IS_FROZEN; + } + return _detectTransferRestriction(from, to, value); } - modifier onlyFrozenlistAdd() { - _authorizeFrozenlistAdd(); - _; + function _transferred(address from, address to, uint256 value) internal view virtual override { + uint8 code = _detectTransferRestriction(from, to, value); + require( + code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + RuleERC2980_InvalidTransfer(address(this), from, to, value, code) + ); } - modifier onlyFrozenlistRemove() { - _authorizeFrozenlistRemove(); - _; + function _transferredFrom(address spender, address from, address to, uint256 value) internal view virtual override { + uint8 code = _detectTransferRestrictionFrom(spender, from, to, value); + require( + code == uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK), + RuleERC2980_InvalidTransferFrom(address(this), spender, from, to, value, code) + ); } - function _authorizeWhitelistAdd() internal view virtual; - function _authorizeWhitelistRemove() internal view virtual; - function _authorizeFrozenlistAdd() internal view virtual; - function _authorizeFrozenlistRemove() internal view virtual; - - /*////////////////////////////////////////////////////////////// - ERC-2771 META TX - //////////////////////////////////////////////////////////////*/ - function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { return ERC2771Context._msgSender(); } diff --git a/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol b/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol index 31d400d..cbb2b95 100644 --- a/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol +++ b/src/rules/validation/abstract/base/RuleIdentityRegistryBase.sol @@ -16,12 +16,40 @@ import {IIdentityRegistryVerified} from "../../../interfaces/IIdentityRegistry.s abstract contract RuleIdentityRegistryBase is RuleNFTAdapter, RuleIdentityRegistryInvariantStorage { IIdentityRegistryVerified public identityRegistry; + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address identityRegistry_) { if (identityRegistry_ != address(0)) { identityRegistry = IIdentityRegistryVerified(identityRegistry_); } } + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyIdentityRegistryManager() { + _authorizeIdentityRegistryManager(); + _; + } + + function _authorizeIdentityRegistryManager() internal view virtual; + + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { + return restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED || restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED + || restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED; + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setIdentityRegistry(address newRegistry) public onlyIdentityRegistryManager { require(newRegistry != address(0), RuleIdentityRegistry_RegistryAddressZeroNotAllowed()); identityRegistry = IIdentityRegistryVerified(newRegistry); @@ -33,6 +61,34 @@ abstract contract RuleIdentityRegistryBase is RuleNFTAdapter, RuleIdentityRegist emit IdentityRegistryUpdated(address(0)); } + function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + _transferred(from, to, value); + } + + function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + _transferredFrom(spender, from, to, value); + } + + function messageForTransferRestriction(uint8 restrictionCode) + public + pure + override(IERC1404) + returns (string memory) + { + if (restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED) { + return TEXT_ADDRESS_FROM_NOT_VERIFIED; + } else if (restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED) { + return TEXT_ADDRESS_TO_NOT_VERIFIED; + } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED) { + return TEXT_ADDRESS_SPENDER_NOT_VERIFIED; + } + return TEXT_CODE_NOT_FOUND; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _detectTransferRestriction( address from, address to, @@ -77,14 +133,6 @@ abstract contract RuleIdentityRegistryBase is RuleNFTAdapter, RuleIdentityRegist return _detectTransferRestriction(from, to, value); } - function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - _transferred(from, to, value); - } - - function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - _transferredFrom(spender, from, to, value); - } - function _transferred(address from, address to, uint256 value) internal view virtual override { uint8 code = _detectTransferRestriction(from, to, value); require( @@ -101,35 +149,4 @@ abstract contract RuleIdentityRegistryBase is RuleNFTAdapter, RuleIdentityRegist ); } - function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { - return restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED || restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED - || restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED; - } - - function messageForTransferRestriction(uint8 restrictionCode) - public - pure - override(IERC1404) - returns (string memory) - { - if (restrictionCode == CODE_ADDRESS_FROM_NOT_VERIFIED) { - return TEXT_ADDRESS_FROM_NOT_VERIFIED; - } else if (restrictionCode == CODE_ADDRESS_TO_NOT_VERIFIED) { - return TEXT_ADDRESS_TO_NOT_VERIFIED; - } else if (restrictionCode == CODE_ADDRESS_SPENDER_NOT_VERIFIED) { - return TEXT_ADDRESS_SPENDER_NOT_VERIFIED; - } - return TEXT_CODE_NOT_FOUND; - } - - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlyIdentityRegistryManager() { - _authorizeIdentityRegistryManager(); - _; - } - - function _authorizeIdentityRegistryManager() internal view virtual; } diff --git a/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol b/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol index 55e07cd..8aebb27 100644 --- a/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol +++ b/src/rules/validation/abstract/base/RuleMaxTotalSupplyBase.sol @@ -17,12 +17,28 @@ abstract contract RuleMaxTotalSupplyBase is RuleTransferValidation, RuleMaxTotal ITotalSupply public tokenContract; uint256 public maxTotalSupply; + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address tokenContract_, uint256 maxTotalSupply_) { require(tokenContract_ != address(0), RuleMaxTotalSupply_TokenAddressZeroNotAllowed()); tokenContract = ITotalSupply(tokenContract_); maxTotalSupply = maxTotalSupply_; } + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { + return restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED; + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function setMaxTotalSupply(uint256 newMaxTotalSupply) public onlyMaxTotalSupplyManager { maxTotalSupply = newMaxTotalSupply; emit MaxTotalSupplyUpdated(newMaxTotalSupply); @@ -34,6 +50,41 @@ abstract contract RuleMaxTotalSupplyBase is RuleTransferValidation, RuleMaxTotal emit TokenContractUpdated(newTokenContract); } + function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + _transferred(from, to, value); + } + + function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + _transferredFrom(spender, from, to, value); + } + + function messageForTransferRestriction(uint8 restrictionCode) + public + pure + override(IERC1404) + returns (string memory) + { + if (restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED) { + return TEXT_MAX_TOTAL_SUPPLY_EXCEEDED; + } + return TEXT_CODE_NOT_FOUND; + } + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyMaxTotalSupplyManager() { + _authorizeMaxTotalSupplyManager(); + _; + } + + function _authorizeMaxTotalSupplyManager() internal view virtual; + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _detectTransferRestriction( address from, address, @@ -63,14 +114,6 @@ abstract contract RuleMaxTotalSupplyBase is RuleTransferValidation, RuleMaxTotal return _detectTransferRestriction(from, to, value); } - function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - _transferred(from, to, value); - } - - function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - _transferredFrom(spender, from, to, value); - } - function _transferred(address from, address to, uint256 value) internal view virtual { uint8 code = _detectTransferRestriction(from, to, value); require( @@ -86,31 +129,4 @@ abstract contract RuleMaxTotalSupplyBase is RuleTransferValidation, RuleMaxTotal RuleMaxTotalSupply_InvalidTransferFrom(address(this), spender, from, to, value, code) ); } - - function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { - return restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED; - } - - function messageForTransferRestriction(uint8 restrictionCode) - public - pure - override(IERC1404) - returns (string memory) - { - if (restrictionCode == CODE_MAX_TOTAL_SUPPLY_EXCEEDED) { - return TEXT_MAX_TOTAL_SUPPLY_EXCEEDED; - } - return TEXT_CODE_NOT_FOUND; - } - - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlyMaxTotalSupplyManager() { - _authorizeMaxTotalSupplyManager(); - _; - } - - function _authorizeMaxTotalSupplyManager() internal view virtual; } diff --git a/src/rules/validation/abstract/base/RuleSanctionsListBase.sol b/src/rules/validation/abstract/base/RuleSanctionsListBase.sol index 66ddb78..586b949 100644 --- a/src/rules/validation/abstract/base/RuleSanctionsListBase.sol +++ b/src/rules/validation/abstract/base/RuleSanctionsListBase.sol @@ -17,6 +17,10 @@ import {IRule} from "RuleEngine/interfaces/IRule.sol"; abstract contract RuleSanctionsListBase is MetaTxModuleStandalone, RuleNFTAdapter, RuleSanctionsListInvariantStorage { ISanctionsList public sanctionsList; + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) MetaTxModuleStandalone(forwarderIrrevocable) { @@ -25,6 +29,67 @@ abstract contract RuleSanctionsListBase is MetaTxModuleStandalone, RuleNFTAdapte } } + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { + return restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED || restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED + || restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED; + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function setSanctionListOracle(ISanctionsList sanctionContractOracle_) public virtual onlySanctionListManager { + require(address(sanctionContractOracle_) != address(0), RuleSanctionsList_OracleAddressZeroNotAllowed()); + _setSanctionListOracle(sanctionContractOracle_); + } + + function clearSanctionListOracle() public virtual onlySanctionListManager { + _setSanctionListOracle(ISanctionsList(address(0))); + } + + function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { + _transferred(from, to, value); + } + + function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + _transferredFrom(spender, from, to, value); + } + + function messageForTransferRestriction(uint8 restrictionCode) + public + pure + override(IERC1404) + returns (string memory) + { + if (restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED) { + return TEXT_ADDRESS_FROM_IS_SANCTIONED; + } else if (restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED) { + return TEXT_ADDRESS_TO_IS_SANCTIONED; + } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED) { + return TEXT_ADDRESS_SPENDER_IS_SANCTIONED; + } + return TEXT_CODE_NOT_FOUND; + } + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlySanctionListManager() { + _authorizeSanctionListManager(); + _; + } + + function _authorizeSanctionListManager() internal view virtual; + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _detectTransferRestriction( address from, address to, @@ -61,44 +126,6 @@ abstract contract RuleSanctionsListBase is MetaTxModuleStandalone, RuleNFTAdapte return uint8(REJECTED_CODE_BASE.TRANSFER_OK); } - function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override(IRule) returns (bool) { - return restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED || restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED - || restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED; - } - - function messageForTransferRestriction(uint8 restrictionCode) - public - pure - override(IERC1404) - returns (string memory) - { - if (restrictionCode == CODE_ADDRESS_FROM_IS_SANCTIONED) { - return TEXT_ADDRESS_FROM_IS_SANCTIONED; - } else if (restrictionCode == CODE_ADDRESS_TO_IS_SANCTIONED) { - return TEXT_ADDRESS_TO_IS_SANCTIONED; - } else if (restrictionCode == CODE_ADDRESS_SPENDER_IS_SANCTIONED) { - return TEXT_ADDRESS_SPENDER_IS_SANCTIONED; - } - return TEXT_CODE_NOT_FOUND; - } - - function setSanctionListOracle(ISanctionsList sanctionContractOracle_) public virtual onlySanctionListManager { - require(address(sanctionContractOracle_) != address(0), RuleSanctionsList_OracleAddressZeroNotAllowed()); - _setSanctionListOracle(sanctionContractOracle_); - } - - function clearSanctionListOracle() public virtual onlySanctionListManager { - _setSanctionListOracle(ISanctionsList(address(0))); - } - - function transferred(address from, address to, uint256 value) public view override(IERC3643IComplianceContract) { - _transferred(from, to, value); - } - - function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - _transferredFrom(spender, from, to, value); - } - function _transferred(address from, address to, uint256 value) internal view virtual override { uint8 code = _detectTransferRestriction(from, to, value); require( @@ -119,15 +146,4 @@ abstract contract RuleSanctionsListBase is MetaTxModuleStandalone, RuleNFTAdapte sanctionsList = sanctionContractOracle_; emit SetSanctionListOracle(sanctionContractOracle_); } - - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlySanctionListManager() { - _authorizeSanctionListManager(); - _; - } - - function _authorizeSanctionListManager() internal view virtual; } diff --git a/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol b/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol index 578e946..cb37bdd 100644 --- a/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol +++ b/src/rules/validation/abstract/base/RuleSpenderWhitelistBase.sol @@ -14,29 +14,33 @@ import {IRuleEngine} from "CMTAT/interfaces/engine/IRuleEngine.sol"; * @dev Direct transfers (`transferred(from,to,value)`) are intentionally no-op. */ abstract contract RuleSpenderWhitelistBase is RuleAddressSet, RuleNFTAdapter, RuleSpenderWhitelistInvariantStorage { - constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ - function _detectTransferRestriction(address, address, uint256) internal pure virtual override returns (uint8) { - return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - } + constructor(address forwarderIrrevocable) RuleAddressSet(forwarderIrrevocable) {} - function _detectTransferRestrictionFrom(address spender, address, address, uint256) - internal - view - virtual - override - returns (uint8) - { - if (spender != address(0) && !_isAddressListed(spender)) { - return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; - } - return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); - } + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ function canReturnTransferRestrictionCode(uint8 restrictionCode) external pure override returns (bool) { return restrictionCode == CODE_ADDRESS_SPENDER_NOT_WHITELISTED; } + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @dev Regular transfers are always accepted by this rule. + */ + function transferred(address, address, uint256) public view override(IERC3643IComplianceContract) {} + + function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { + _transferredFrom(spender, from, to, value); + } + function messageForTransferRestriction(uint8 restrictionCode) public pure @@ -49,13 +53,25 @@ abstract contract RuleSpenderWhitelistBase is RuleAddressSet, RuleNFTAdapter, Ru return TEXT_CODE_NOT_FOUND; } - /** - * @dev Regular transfers are always accepted by this rule. - */ - function transferred(address, address, uint256) public view override(IERC3643IComplianceContract) {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ - function transferred(address spender, address from, address to, uint256 value) public view override(IRuleEngine) { - _transferredFrom(spender, from, to, value); + function _detectTransferRestriction(address, address, uint256) internal pure virtual override returns (uint8) { + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); + } + + function _detectTransferRestrictionFrom(address spender, address, address, uint256) + internal + view + virtual + override + returns (uint8) + { + if (spender != address(0) && !_isAddressListed(spender)) { + return CODE_ADDRESS_SPENDER_NOT_WHITELISTED; + } + return uint8(IERC1404Extend.REJECTED_CODE_BASE.TRANSFER_OK); } function _transferred(address, address, uint256) internal view virtual override { diff --git a/src/rules/validation/abstract/base/RuleWhitelistBase.sol b/src/rules/validation/abstract/base/RuleWhitelistBase.sol index 570f6a9..6cdb6cd 100644 --- a/src/rules/validation/abstract/base/RuleWhitelistBase.sol +++ b/src/rules/validation/abstract/base/RuleWhitelistBase.sol @@ -11,10 +11,58 @@ import {IIdentityRegistryVerified} from "../../../interfaces/IIdentityRegistry.s * @notice Core whitelist logic without access-control policy. */ abstract contract RuleWhitelistBase is RuleAddressSet, RuleWhitelistShared, IIdentityRegistryVerified { - constructor(address forwarderIrrevocable, bool checkSpender_) RuleAddressSet(forwarderIrrevocable) { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + RuleAddressSet(forwarderIrrevocable) + { checkSpender = checkSpender_; + if (allowMintBurn) { + _addAddress(address(0)); + emit AddAddress(address(0)); + } + } + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { + _setCheckSpender(value); + emit CheckSpenderUpdated(value); + } + + function isVerified(address targetAddress) + public + view + virtual + override(IIdentityRegistryVerified) + returns (bool isListed) + { + isListed = _isAddressListed(targetAddress); + } + + function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { + return RuleTransferValidation.supportsInterface(interfaceId); + } + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyCheckSpenderManager() { + _authorizeCheckSpenderManager(); + _; } + function _authorizeCheckSpenderManager() internal view virtual; + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _detectTransferRestriction( address from, address to, @@ -47,37 +95,7 @@ abstract contract RuleWhitelistBase is RuleAddressSet, RuleWhitelistShared, IIde return _detectTransferRestriction(from, to, value); } - function isVerified(address targetAddress) - public - view - virtual - override(IIdentityRegistryVerified) - returns (bool isListed) - { - isListed = _isAddressListed(targetAddress); - } - - function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { - _setCheckSpender(value); - emit CheckSpenderUpdated(value); - } - function _setCheckSpender(bool value) internal virtual { checkSpender = value; } - - function supportsInterface(bytes4 interfaceId) public view virtual override(RuleTransferValidation) returns (bool) { - return RuleTransferValidation.supportsInterface(interfaceId); - } - - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlyCheckSpenderManager() { - _authorizeCheckSpenderManager(); - _; - } - - function _authorizeCheckSpenderManager() internal view virtual; } diff --git a/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol b/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol index f522e3a..0e3d188 100644 --- a/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol +++ b/src/rules/validation/abstract/base/RuleWhitelistWrapperBase.sol @@ -2,11 +2,8 @@ pragma solidity ^0.8.20; -/* ==== OpenZeppelin === */ -import {AccessControl} from "OZ/access/AccessControl.sol"; /* ==== Abstract contracts === */ import {MetaTxModuleStandalone, ERC2771Context} from "../../../../modules/MetaTxModuleStandalone.sol"; -import {Context} from "OZ/utils/Context.sol"; import {RuleWhitelistShared} from "../core/RuleWhitelistShared.sol"; import {RuleTransferValidation} from "../core/RuleTransferValidation.sol"; /* ==== RuleEngine === */ @@ -35,7 +32,59 @@ abstract contract RuleWhitelistWrapperBase is checkSpender = checkSpender_; } - /* ============ View Functions ============ */ + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + + modifier onlyCheckSpenderManager() { + _authorizeCheckSpenderManager(); + _; + } + + function _authorizeCheckSpenderManager() internal virtual; + + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Sets whether the rule should enforce spender-based checks. + * @dev + * - Restricted to holders of the manager role. + * - Updates the internal `checkSpender` flag. + * - Emits a {CheckSpenderUpdated} event. + * @param value The new state of the `checkSpender` flag. + */ + function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { + _setCheckSpender(value); + emit CheckSpenderUpdated(value); + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(RuleTransferValidation) + returns (bool) + { + return RuleTransferValidation.supportsInterface(interfaceId); + } + + /** + * @notice Returns true if the address is listed in at least one child whitelist rule. + * @dev Delegates to the same child-rule scan used by transfer restriction checks. + */ + function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { + address[] memory targets = new address[](1); + targets[0] = targetAddress; + bool[] memory result = _detectTransferRestrictionForTargets(targets); + return result[0]; + } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** * @notice Go through all the whitelist rules to know if a restriction exists on the transfer * @param from the origin address @@ -99,42 +148,6 @@ abstract contract RuleWhitelistWrapperBase is // ERC-7943 tokenId overloads are provided by {RuleNFTAdapter} via RuleWhitelistShared. - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override(AccessControl, RuleTransferValidation) - returns (bool) - { - return AccessControl.supportsInterface(interfaceId) || RuleTransferValidation.supportsInterface(interfaceId); - } - - /** - * @notice Returns true if the address is listed in at least one child whitelist rule. - * @dev Delegates to the same child-rule scan used by transfer restriction checks. - */ - function isVerified(address targetAddress) public view virtual override(IIdentityRegistryVerified) returns (bool) { - address[] memory targets = new address[](1); - targets[0] = targetAddress; - bool[] memory result = _detectTransferRestrictionForTargets(targets); - return result[0]; - } - - /* ============ Access control ============ */ - - /** - * @notice Sets whether the rule should enforce spender-based checks. - * @dev - * - Restricted to holders of the manager role. - * - Updates the internal `checkSpender` flag. - * - Emits a {CheckSpenderUpdated} event. - * @param value The new state of the `checkSpender` flag. - */ - function setCheckSpender(bool value) public virtual onlyCheckSpenderManager { - _setCheckSpender(value); - emit CheckSpenderUpdated(value); - } - function _transferred(address from, address to, uint256 value) internal view @@ -153,10 +166,6 @@ abstract contract RuleWhitelistWrapperBase is RuleWhitelistShared._transferredFrom(spender, from, to, value); } - /*////////////////////////////////////////////////////////////// - INTERNAL/PRIVATE FUNCTIONS - //////////////////////////////////////////////////////////////*/ - /** * @notice Evaluates target addresses across all child rules. * @param targetAddress Addresses to validate (from/to[/spender]). @@ -203,17 +212,6 @@ abstract contract RuleWhitelistWrapperBase is checkSpender = value; } - /*////////////////////////////////////////////////////////////// - ACCESS CONTROL - //////////////////////////////////////////////////////////////*/ - - modifier onlyCheckSpenderManager() { - _authorizeCheckSpenderManager(); - _; - } - - function _authorizeCheckSpenderManager() internal virtual; - /*////////////////////////////////////////////////////////////// ERC-2771 //////////////////////////////////////////////////////////////*/ @@ -221,21 +219,21 @@ abstract contract RuleWhitelistWrapperBase is /** * @dev This surcharge is not necessary if you do not use the MetaTxModule */ - function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { + function _msgSender() internal view virtual override(ERC2771Context) returns (address sender) { return ERC2771Context._msgSender(); } /** * @dev This surcharge is not necessary if you do not use the MetaTxModule */ - function _msgData() internal view virtual override(ERC2771Context, Context) returns (bytes calldata) { + function _msgData() internal view virtual override(ERC2771Context) returns (bytes calldata) { return ERC2771Context._msgData(); } /** * @dev This surcharge is not necessary if you do not use the MetaTxModule */ - function _contextSuffixLength() internal view virtual override(ERC2771Context, Context) returns (uint256) { + function _contextSuffixLength() internal view virtual override(ERC2771Context) returns (uint256) { return ERC2771Context._contextSuffixLength(); } } diff --git a/src/rules/validation/abstract/core/RuleNFTAdapter.sol b/src/rules/validation/abstract/core/RuleNFTAdapter.sol index c9f50a8..db03caa 100644 --- a/src/rules/validation/abstract/core/RuleNFTAdapter.sol +++ b/src/rules/validation/abstract/core/RuleNFTAdapter.sol @@ -23,15 +23,10 @@ abstract contract RuleNFTAdapter is RuleTransferValidation, IERC7943NonFungibleC bytes4(keccak256("transferred(address,address,uint256,uint256)")); bytes4 internal constant TRANSFERRED_SELECTOR_ERC7943_FROM = bytes4(keccak256("transferred(address,address,address,uint256,uint256)")); - /** - * @notice Internal hook for post-transfer validation or state updates. - */ - function _transferred(address from, address to, uint256 value) internal virtual; - /** - * @notice Internal hook for post-transfer validation or state updates (spender-aware). - */ - function _transferredFrom(address spender, address from, address to, uint256 value) internal virtual; + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /** * @inheritdoc IERC7943NonFungibleComplianceExtend @@ -161,4 +156,18 @@ abstract contract RuleNFTAdapter is RuleTransferValidation, IERC7943NonFungibleC _transferred(ctx.from, ctx.to, ctx.value); } } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Internal hook for post-transfer validation or state updates. + */ + function _transferred(address from, address to, uint256 value) internal virtual; + + /** + * @notice Internal hook for post-transfer validation or state updates (spender-aware). + */ + function _transferredFrom(address spender, address from, address to, uint256 value) internal virtual; } diff --git a/src/rules/validation/abstract/core/RuleTransferValidation.sol b/src/rules/validation/abstract/core/RuleTransferValidation.sol index d120135..ed0fa18 100644 --- a/src/rules/validation/abstract/core/RuleTransferValidation.sol +++ b/src/rules/validation/abstract/core/RuleTransferValidation.sol @@ -4,11 +4,14 @@ pragma solidity ^0.8.20; /* ==== CMTAT === */ import {IERC1404, IERC1404Extend} from "CMTAT/interfaces/tokenization/draft-IERC1404.sol"; -import {IERC3643ComplianceRead} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; +import {IERC3643ComplianceRead, IERC3643IComplianceContract} from "CMTAT/interfaces/tokenization/IERC3643Partial.sol"; import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; /* ==== RuleEngine === */ import {IRule} from "RuleEngine/interfaces/IRule.sol"; import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; +/* ==== CMTAT libraries === */ +import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; +import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; /* ==== Modules === */ import {VersionModule} from "../../../../modules/VersionModule.sol"; @@ -19,32 +22,9 @@ abstract contract RuleTransferValidation is IERC7551Compliance, IRule { - /** - * @notice Internal transfer restriction check. - * @param from the origin address - * @param to the destination address - * @param value amount to transfer - * @return restrictionCode The restriction code for this rule. - */ - function _detectTransferRestriction(address from, address to, uint256 value) - internal - view - virtual - returns (uint8 restrictionCode); - - /** - * @notice Internal transfer restriction check for spender-initiated transfers. - * @param spender the caller executing the transfer - * @param from the origin address - * @param to the destination address - * @param value amount to transfer - * @return restrictionCode The restriction code for this rule. - */ - function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) - internal - view - virtual - returns (uint8 restrictionCode); + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /** * @inheritdoc IERC1404 @@ -104,6 +84,41 @@ abstract contract RuleTransferValidation is } function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { - return interfaceId == type(IRule).interfaceId || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID; + return interfaceId == RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID + || interfaceId == ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID + || interfaceId == RuleInterfaceId.IRULE_INTERFACE_ID + || interfaceId == type(IERC7551Compliance).interfaceId + || interfaceId == type(IERC3643IComplianceContract).interfaceId; } + + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /** + * @notice Internal transfer restriction check. + * @param from the origin address + * @param to the destination address + * @param value amount to transfer + * @return restrictionCode The restriction code for this rule. + */ + function _detectTransferRestriction(address from, address to, uint256 value) + internal + view + virtual + returns (uint8 restrictionCode); + + /** + * @notice Internal transfer restriction check for spender-initiated transfers. + * @param spender the caller executing the transfer + * @param from the origin address + * @param to the destination address + * @param value amount to transfer + * @return restrictionCode The restriction code for this rule. + */ + function _detectTransferRestrictionFrom(address spender, address from, address to, uint256 value) + internal + view + virtual + returns (uint8 restrictionCode); } diff --git a/src/rules/validation/abstract/core/RuleWhitelistShared.sol b/src/rules/validation/abstract/core/RuleWhitelistShared.sol index 73d819a..b53fbad 100644 --- a/src/rules/validation/abstract/core/RuleWhitelistShared.sol +++ b/src/rules/validation/abstract/core/RuleWhitelistShared.sol @@ -22,7 +22,10 @@ abstract contract RuleWhitelistShared is RuleNFTAdapter, RuleWhitelistInvariantS */ bool public checkSpender; - /* ============ View Functions ============ */ + /*////////////////////////////////////////////////////////////// + EXTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + /** * @notice Checks whether a restriction code is recognized by this rule. * @dev @@ -60,7 +63,9 @@ abstract contract RuleWhitelistShared is RuleNFTAdapter, RuleWhitelistInvariantS } } - /* ============ State Functions ============ */ + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /** * @notice ERC-3643 hook called when a transfer occurs. @@ -92,6 +97,10 @@ abstract contract RuleWhitelistShared is RuleNFTAdapter, RuleWhitelistInvariantS _transferredFrom(spender, from, to, value); } + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _transferred(address from, address to, uint256 value) internal view virtual override { uint8 code = _detectTransferRestriction(from, to, value); require( diff --git a/src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol b/src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol index 5b6833e..e6adfd1 100644 --- a/src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol +++ b/src/rules/validation/abstract/invariant/RuleIdentityRegistryInvariantStorage.sol @@ -4,12 +4,6 @@ pragma solidity ^0.8.20; import {RuleSharedInvariantStorage} from "./RuleSharedInvariantStorage.sol"; abstract contract RuleIdentityRegistryInvariantStorage is RuleSharedInvariantStorage { - error RuleIdentityRegistry_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleIdentityRegistry_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); - error RuleIdentityRegistry_RegistryAddressZeroNotAllowed(); - string constant TEXT_ADDRESS_FROM_NOT_VERIFIED = "The sender is not verified"; string constant TEXT_ADDRESS_TO_NOT_VERIFIED = "The recipient is not verified"; string constant TEXT_ADDRESS_SPENDER_NOT_VERIFIED = "The spender is not verified"; @@ -20,4 +14,10 @@ abstract contract RuleIdentityRegistryInvariantStorage is RuleSharedInvariantSto uint8 public constant CODE_ADDRESS_SPENDER_NOT_VERIFIED = 57; event IdentityRegistryUpdated(address indexed newRegistry); + + error RuleIdentityRegistry_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleIdentityRegistry_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); + error RuleIdentityRegistry_RegistryAddressZeroNotAllowed(); } diff --git a/src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol b/src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol index ad3d3bd..310a1c5 100644 --- a/src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol +++ b/src/rules/validation/abstract/invariant/RuleMaxTotalSupplyInvariantStorage.sol @@ -4,12 +4,6 @@ pragma solidity ^0.8.20; import {RuleSharedInvariantStorage} from "./RuleSharedInvariantStorage.sol"; abstract contract RuleMaxTotalSupplyInvariantStorage is RuleSharedInvariantStorage { - error RuleMaxTotalSupply_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleMaxTotalSupply_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); - error RuleMaxTotalSupply_TokenAddressZeroNotAllowed(); - string constant TEXT_MAX_TOTAL_SUPPLY_EXCEEDED = "Max total supply exceeded"; // It is very important that each rule uses an unique code @@ -17,4 +11,10 @@ abstract contract RuleMaxTotalSupplyInvariantStorage is RuleSharedInvariantStora event MaxTotalSupplyUpdated(uint256 newMaxTotalSupply); event TokenContractUpdated(address indexed newTokenContract); + + error RuleMaxTotalSupply_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleMaxTotalSupply_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); + error RuleMaxTotalSupply_TokenAddressZeroNotAllowed(); } diff --git a/src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol b/src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol index 27d3c95..10d8f06 100644 --- a/src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol +++ b/src/rules/validation/abstract/invariant/RuleSanctionsListInvariantStorage.sol @@ -6,14 +6,6 @@ import {RuleSharedInvariantStorage} from "./RuleSharedInvariantStorage.sol"; import {ISanctionsList} from "../../../interfaces/ISanctionsList.sol"; abstract contract RuleSanctionsListInvariantStorage is RuleSharedInvariantStorage { - /* ============ Event ============ */ - event SetSanctionListOracle(ISanctionsList newOracle); - /* ============ Custom errors ============ */ - error RuleSanctionsList_OracleAddressZeroNotAllowed(); - error RuleSanctionsList_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); - error RuleSanctionsList_InvalidTransferFrom( - address rule, address spender, address from, address to, uint256 value, uint8 code - ); /* ============ Role ============ */ bytes32 public constant SANCTIONLIST_ROLE = keccak256("SANCTIONLIST_ROLE"); @@ -27,4 +19,14 @@ abstract contract RuleSanctionsListInvariantStorage is RuleSharedInvariantStorag uint8 public constant CODE_ADDRESS_FROM_IS_SANCTIONED = 30; uint8 public constant CODE_ADDRESS_TO_IS_SANCTIONED = 31; uint8 public constant CODE_ADDRESS_SPENDER_IS_SANCTIONED = 32; + + /* ============ Event ============ */ + event SetSanctionListOracle(ISanctionsList newOracle); + + /* ============ Custom errors ============ */ + error RuleSanctionsList_OracleAddressZeroNotAllowed(); + error RuleSanctionsList_InvalidTransfer(address rule, address from, address to, uint256 value, uint8 code); + error RuleSanctionsList_InvalidTransferFrom( + address rule, address spender, address from, address to, uint256 value, uint8 code + ); } diff --git a/src/rules/validation/deployment/RuleBlacklist.sol b/src/rules/validation/deployment/RuleBlacklist.sol index 6c4d20d..421abbc 100644 --- a/src/rules/validation/deployment/RuleBlacklist.sol +++ b/src/rules/validation/deployment/RuleBlacklist.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; /* ==== Abstract contracts === */ import {RuleBlacklistBase} from "../abstract/base/RuleBlacklistBase.sol"; @@ -25,6 +25,10 @@ contract RuleBlacklist is RuleBlacklistBase, AccessControlModuleStandalone { AccessControlModuleStandalone(admin) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view @@ -36,10 +40,18 @@ contract RuleBlacklist is RuleBlacklistBase, AccessControlModuleStandalone { || RuleBlacklistBase.supportsInterface(interfaceId); } + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol b/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol index ac2cea9..f299e82 100644 --- a/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleBlacklistOwnable2Step.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {RuleBlacklistBase} from "../abstract/base/RuleBlacklistBase.sol"; import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; @@ -12,12 +12,24 @@ import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; * @notice Ownable2Step variant of RuleBlacklist with owner-based authorization hooks. */ contract RuleBlacklistOwnable2Step is RuleBlacklistBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable) RuleBlacklistBase(forwarderIrrevocable) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleERC2980.sol b/src/rules/validation/deployment/RuleERC2980.sol index 1ae4077..a8cbe33 100644 --- a/src/rules/validation/deployment/RuleERC2980.sol +++ b/src/rules/validation/deployment/RuleERC2980.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; /* ==== Abstract contracts === */ import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleERC2980Base} from "../abstract/base/RuleERC2980Base.sol"; @@ -37,14 +37,15 @@ contract RuleERC2980 is RuleERC2980Base, AccessControlModuleStandalone { /** * @param admin Address that receives `DEFAULT_ADMIN_ROLE` (implicitly holds all roles). * @param forwarderIrrevocable Address of the ERC-2771 forwarder for meta-transactions. + * @param allowBurn If true, whitelists `address(0)` at deployment to allow burn/redemption flows. */ - constructor(address admin, address forwarderIrrevocable) - RuleERC2980Base(forwarderIrrevocable) + constructor(address admin, address forwarderIrrevocable, bool allowBurn) + RuleERC2980Base(forwarderIrrevocable, allowBurn) AccessControlModuleStandalone(admin) {} /*////////////////////////////////////////////////////////////// - INTERFACE SUPPORT + PUBLIC FUNCTIONS //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) @@ -69,6 +70,10 @@ contract RuleERC2980 is RuleERC2980Base, AccessControlModuleStandalone { function _authorizeFrozenlistRemove() internal view virtual override onlyRole(FROZENLIST_REMOVE_ROLE) {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol b/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol index 0764662..072adbe 100644 --- a/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol +++ b/src/rules/validation/deployment/RuleERC2980Ownable2Step.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {RuleERC2980Base} from "../abstract/base/RuleERC2980Base.sol"; /** @@ -12,7 +12,23 @@ import {RuleERC2980Base} from "../abstract/base/RuleERC2980Base.sol"; * @dev All whitelist and frozenlist management functions are restricted to the contract owner. */ contract RuleERC2980Ownable2Step is RuleERC2980Base, Ownable2Step { - constructor(address owner, address forwarderIrrevocable) RuleERC2980Base(forwarderIrrevocable) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + /** + * @param owner Contract owner. + * @param forwarderIrrevocable Address of the ERC-2771 forwarder for meta-transactions. + * @param allowBurn If true, whitelists `address(0)` at deployment to allow burn/redemption flows. + */ + constructor(address owner, address forwarderIrrevocable, bool allowBurn) + RuleERC2980Base(forwarderIrrevocable, allowBurn) + Ownable(owner) + {} + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ function _authorizeWhitelistAdd() internal view virtual override onlyOwner {} @@ -22,6 +38,10 @@ contract RuleERC2980Ownable2Step is RuleERC2980Base, Ownable2Step { function _authorizeFrozenlistRemove() internal view virtual override onlyOwner {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleERC2980Base) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleIdentityRegistry.sol b/src/rules/validation/deployment/RuleIdentityRegistry.sol index 440a8e2..72109f8 100644 --- a/src/rules/validation/deployment/RuleIdentityRegistry.sol +++ b/src/rules/validation/deployment/RuleIdentityRegistry.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleIdentityRegistryBase} from "../abstract/base/RuleIdentityRegistryBase.sol"; import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.sol"; @@ -12,11 +12,19 @@ import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.so * @dev Burns (to == address(0)) are allowed even if the sender is not verified. */ contract RuleIdentityRegistry is AccessControlModuleStandalone, RuleIdentityRegistryBase { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address identityRegistry_) AccessControlModuleStandalone(admin) RuleIdentityRegistryBase(identityRegistry_) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view diff --git a/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol b/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol index 09d99ba..c46ff38 100644 --- a/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleIdentityRegistryOwnable2Step.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; import {RuleIdentityRegistryBase} from "../abstract/base/RuleIdentityRegistryBase.sol"; /** @@ -10,7 +10,15 @@ import {RuleIdentityRegistryBase} from "../abstract/base/RuleIdentityRegistryBas * @notice Ownable2Step variant of RuleIdentityRegistry. */ contract RuleIdentityRegistryOwnable2Step is RuleIdentityRegistryBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address identityRegistry_) RuleIdentityRegistryBase(identityRegistry_) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeIdentityRegistryManager() internal view virtual override onlyOwner {} } diff --git a/src/rules/validation/deployment/RuleMaxTotalSupply.sol b/src/rules/validation/deployment/RuleMaxTotalSupply.sol index 797e68f..854f45d 100644 --- a/src/rules/validation/deployment/RuleMaxTotalSupply.sol +++ b/src/rules/validation/deployment/RuleMaxTotalSupply.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleMaxTotalSupplyBase} from "../abstract/base/RuleMaxTotalSupplyBase.sol"; import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.sol"; @@ -11,6 +11,10 @@ import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.so * @notice Restricts minting so that total supply never exceeds a maximum value. */ contract RuleMaxTotalSupply is AccessControlModuleStandalone, RuleMaxTotalSupplyBase { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + /** * @param admin Address that receives the default admin role. * @param tokenContract_ Token contract that exposes totalSupply (must be non-zero). @@ -21,6 +25,10 @@ contract RuleMaxTotalSupply is AccessControlModuleStandalone, RuleMaxTotalSupply RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view diff --git a/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol b/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol index 9fc5c4a..46a78d4 100644 --- a/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleMaxTotalSupplyOwnable2Step.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; import {RuleMaxTotalSupplyBase} from "../abstract/base/RuleMaxTotalSupplyBase.sol"; /** @@ -10,10 +10,18 @@ import {RuleMaxTotalSupplyBase} from "../abstract/base/RuleMaxTotalSupplyBase.so * @notice Ownable2Step variant of RuleMaxTotalSupply. */ contract RuleMaxTotalSupplyOwnable2Step is RuleMaxTotalSupplyBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address tokenContract_, uint256 maxTotalSupply_) RuleMaxTotalSupplyBase(tokenContract_, maxTotalSupply_) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeMaxTotalSupplyManager() internal view virtual override onlyOwner {} } diff --git a/src/rules/validation/deployment/RuleSanctionsList.sol b/src/rules/validation/deployment/RuleSanctionsList.sol index 165600f..73751c4 100644 --- a/src/rules/validation/deployment/RuleSanctionsList.sol +++ b/src/rules/validation/deployment/RuleSanctionsList.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {ERC2771Context} from "../../../modules/MetaTxModuleStandalone.sol"; import {RuleSanctionsListBase} from "../abstract/base/RuleSanctionsListBase.sol"; @@ -14,6 +14,10 @@ import {ISanctionsList} from "../../interfaces/ISanctionsList.sol"; * @notice Compliance rule enforcing sanctions-screening for token transfers. */ contract RuleSanctionsList is AccessControlModuleStandalone, RuleSanctionsListBase { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + /** * @param admin Address of the contract (Access Control) * @param forwarderIrrevocable Address of the forwarder, required for the gasless support @@ -23,6 +27,10 @@ contract RuleSanctionsList is AccessControlModuleStandalone, RuleSanctionsListBa RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view @@ -41,7 +49,7 @@ contract RuleSanctionsList is AccessControlModuleStandalone, RuleSanctionsListBa function _authorizeSanctionListManager() internal view virtual override onlyRole(SANCTIONLIST_ROLE) {} /*////////////////////////////////////////////////////////////// - ERC-2771 + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { diff --git a/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol b/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol index 2f8018d..47b40fe 100644 --- a/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleSanctionsListOwnable2Step.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {ERC2771Context} from "../../../modules/MetaTxModuleStandalone.sol"; import {RuleSanctionsListBase} from "../abstract/base/RuleSanctionsListBase.sol"; import {ISanctionsList} from "../../interfaces/ISanctionsList.sol"; @@ -13,13 +13,25 @@ import {ISanctionsList} from "../../interfaces/ISanctionsList.sol"; * @notice Ownable2Step variant of RuleSanctionsList. */ contract RuleSanctionsListOwnable2Step is RuleSanctionsListBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable, ISanctionsList sanctionContractOracle_) RuleSanctionsListBase(forwarderIrrevocable, sanctionContractOracle_) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeSanctionListManager() internal view virtual override onlyOwner {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(ERC2771Context, Context) returns (address sender) { return ERC2771Context._msgSender(); } diff --git a/src/rules/validation/deployment/RuleSpenderWhitelist.sol b/src/rules/validation/deployment/RuleSpenderWhitelist.sol index ee1bb70..50d3bf3 100644 --- a/src/rules/validation/deployment/RuleSpenderWhitelist.sol +++ b/src/rules/validation/deployment/RuleSpenderWhitelist.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleSpenderWhitelistBase} from "../abstract/base/RuleSpenderWhitelistBase.sol"; import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; @@ -13,11 +13,19 @@ import {RuleTransferValidation} from "../abstract/core/RuleTransferValidation.so * @notice AccessControlEnumerable deployment variant of spender whitelist rule. */ contract RuleSpenderWhitelist is RuleSpenderWhitelistBase, AccessControlModuleStandalone { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address admin, address forwarderIrrevocable) RuleSpenderWhitelistBase(forwarderIrrevocable) AccessControlModuleStandalone(admin) {} + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function supportsInterface(bytes4 interfaceId) public view @@ -29,10 +37,18 @@ contract RuleSpenderWhitelist is RuleSpenderWhitelistBase, AccessControlModuleSt || RuleTransferValidation.supportsInterface(interfaceId); } + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeAddressListAdd() internal view virtual override onlyRole(ADDRESS_LIST_ADD_ROLE) {} function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol b/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol index 18ab65e..f9c2de8 100644 --- a/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {RuleSpenderWhitelistBase} from "../abstract/base/RuleSpenderWhitelistBase.sol"; import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; @@ -12,15 +12,27 @@ import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; * @notice Ownable2Step deployment variant of spender whitelist rule. */ contract RuleSpenderWhitelistOwnable2Step is RuleSpenderWhitelistBase, Ownable2Step { + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + constructor(address owner, address forwarderIrrevocable) RuleSpenderWhitelistBase(forwarderIrrevocable) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} function _authorizeAddressListRemove() internal view virtual override onlyOwner {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleWhitelist.sol b/src/rules/validation/deployment/RuleWhitelist.sol index dc4c75e..4168280 100644 --- a/src/rules/validation/deployment/RuleWhitelist.sol +++ b/src/rules/validation/deployment/RuleWhitelist.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; /* ==== Abstract contracts === */ import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleWhitelistBase} from "../abstract/base/RuleWhitelistBase.sol"; @@ -25,15 +25,19 @@ contract RuleWhitelist is RuleWhitelistBase, AccessControlModuleStandalone { /** * @param admin Address of the contract (Access Control) * @param forwarderIrrevocable Address of the forwarder, required for the gasless support + * @param checkSpender_ Enables spender checks for transferFrom when true. + * @param allowMintBurn Pre-lists `address(0)` at deployment when true. */ - constructor(address admin, address forwarderIrrevocable, bool checkSpender_) - RuleWhitelistBase(forwarderIrrevocable, checkSpender_) + constructor(address admin, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + RuleWhitelistBase(forwarderIrrevocable, checkSpender_, allowMintBurn) AccessControlModuleStandalone(admin) { // no-op } - /* ============ View Functions ============ */ + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /** * @notice Indicates whether this contract supports a given interface. @@ -61,6 +65,10 @@ contract RuleWhitelist is RuleWhitelistBase, AccessControlModuleStandalone { function _authorizeAddressListRemove() internal view virtual override onlyRole(ADDRESS_LIST_REMOVE_ROLE) {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol b/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol index e5cc721..d2f8aaf 100644 --- a/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleWhitelistOwnable2Step.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MPL-2.0 pragma solidity ^0.8.20; -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; import {RuleWhitelistBase} from "../abstract/base/RuleWhitelistBase.sol"; import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; @@ -12,17 +12,35 @@ import {RuleAddressSet} from "../abstract/RuleAddressSet/RuleAddressSet.sol"; * @notice Ownable2Step variant of RuleWhitelist with owner-based authorization hooks. */ contract RuleWhitelistOwnable2Step is RuleWhitelistBase, Ownable2Step { - constructor(address owner, address forwarderIrrevocable, bool checkSpender_) - RuleWhitelistBase(forwarderIrrevocable, checkSpender_) + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + /** + * @param owner Contract owner. + * @param forwarderIrrevocable Address of the ERC-2771 forwarder. + * @param checkSpender_ Enables spender checks for transferFrom when true. + * @param allowMintBurn Pre-lists `address(0)` at deployment when true. + */ + constructor(address owner, address forwarderIrrevocable, bool checkSpender_, bool allowMintBurn) + RuleWhitelistBase(forwarderIrrevocable, checkSpender_, allowMintBurn) Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeAddressListAdd() internal view virtual override onlyOwner {} function _authorizeAddressListRemove() internal view virtual override onlyOwner {} function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} + /*////////////////////////////////////////////////////////////// + INTERNAL FUNCTIONS + //////////////////////////////////////////////////////////////*/ + function _msgSender() internal view virtual override(Context, RuleAddressSet) returns (address sender) { return super._msgSender(); } diff --git a/src/rules/validation/deployment/RuleWhitelistWrapper.sol b/src/rules/validation/deployment/RuleWhitelistWrapper.sol index 7c4b750..99297e1 100644 --- a/src/rules/validation/deployment/RuleWhitelistWrapper.sol +++ b/src/rules/validation/deployment/RuleWhitelistWrapper.sol @@ -3,9 +3,8 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import {AccessControl} from "OZ/access/AccessControl.sol"; -import {AccessControlEnumerable} from "OZ/access/extensions/AccessControlEnumerable.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {AccessControlEnumerable} from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; /* ==== Abstract contracts === */ import {AccessControlModuleStandalone} from "../../../modules/AccessControlModuleStandalone.sol"; import {RuleWhitelistWrapperBase} from "../abstract/base/RuleWhitelistWrapperBase.sol"; @@ -26,7 +25,9 @@ contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleSt AccessControlModuleStandalone(admin) {} - /* ============ Access control ============ */ + /*////////////////////////////////////////////////////////////// + PUBLIC FUNCTIONS + //////////////////////////////////////////////////////////////*/ /** * @dev Returns `true` if `account` has been granted `role`. @@ -35,12 +36,27 @@ contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleSt public view virtual - override(AccessControl, AccessControlModuleStandalone) + override returns (bool) { return AccessControlModuleStandalone.hasRole(role, account); } + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(AccessControlEnumerable, RuleWhitelistWrapperBase) + returns (bool) + { + return RuleWhitelistWrapperBase.supportsInterface(interfaceId) + || AccessControlEnumerable.supportsInterface(interfaceId); + } + + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeCheckSpenderManager() internal virtual override onlyRole(DEFAULT_ADMIN_ROLE) {} /** @@ -49,7 +65,7 @@ contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleSt function _onlyRulesManager() internal virtual override onlyRole(RULES_MANAGEMENT_ROLE) {} /*////////////////////////////////////////////////////////////// - ERC-2771 + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { @@ -70,21 +86,10 @@ contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleSt return RuleWhitelistWrapperBase._contextSuffixLength(); } - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override(AccessControlEnumerable, RuleWhitelistWrapperBase) - returns (bool) - { - return RuleWhitelistWrapperBase.supportsInterface(interfaceId) - || AccessControlEnumerable.supportsInterface(interfaceId); - } - function _grantRole(bytes32 role, address account) internal virtual - override(AccessControl, AccessControlEnumerable) + override returns (bool) { return AccessControlEnumerable._grantRole(role, account); @@ -93,7 +98,7 @@ contract RuleWhitelistWrapper is RuleWhitelistWrapperBase, AccessControlModuleSt function _revokeRole(bytes32 role, address account) internal virtual - override(AccessControl, AccessControlEnumerable) + override returns (bool) { return AccessControlEnumerable._revokeRole(role, account); diff --git a/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol b/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol index 9db5af3..d5f7bad 100644 --- a/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol +++ b/src/rules/validation/deployment/RuleWhitelistWrapperOwnable2Step.sol @@ -3,9 +3,9 @@ pragma solidity ^0.8.20; /* ==== OpenZeppelin === */ -import {Ownable} from "OZ/access/Ownable.sol"; -import {Ownable2Step} from "OZ/access/Ownable2Step.sol"; -import {Context} from "OZ/utils/Context.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Context} from "@openzeppelin/contracts/utils/Context.sol"; /* ==== Abstract contracts === */ import {RuleWhitelistWrapperBase} from "../abstract/base/RuleWhitelistWrapperBase.sol"; @@ -25,6 +25,10 @@ contract RuleWhitelistWrapperOwnable2Step is RuleWhitelistWrapperBase, Ownable2S Ownable(owner) {} + /*////////////////////////////////////////////////////////////// + ACCESS CONTROL + //////////////////////////////////////////////////////////////*/ + function _authorizeCheckSpenderManager() internal view virtual override onlyOwner {} /** @@ -33,7 +37,7 @@ contract RuleWhitelistWrapperOwnable2Step is RuleWhitelistWrapperBase, Ownable2S function _onlyRulesManager() internal view virtual override onlyOwner {} /*////////////////////////////////////////////////////////////// - ERC-2771 + INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function _msgSender() internal view virtual override(RuleWhitelistWrapperBase, Context) returns (address sender) { diff --git a/test/Coverage/DeploymentOperationCoverage.t.sol b/test/Coverage/DeploymentOperationCoverage.t.sol index b4e692d..8eb1297 100644 --- a/test/Coverage/DeploymentOperationCoverage.t.sol +++ b/test/Coverage/DeploymentOperationCoverage.t.sol @@ -3,9 +3,12 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; -import {IERC165} from "OZ/utils/introspection/IERC165.sol"; -import {IRule} from "RuleEngine/interfaces/IRule.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; +import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; +import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; +import {IERC7551Compliance} from "CMTAT/interfaces/tokenization/draft-IERC7551.sol"; +import {IERC3643ComplianceFull} from "src/mocks/IERC3643ComplianceFull.sol"; import {ISanctionsList} from "src/rules/interfaces/ISanctionsList.sol"; import {RuleConditionalTransferLight} from "src/rules/operation/RuleConditionalTransferLight.sol"; import { @@ -26,20 +29,20 @@ import { contract DeploymentCoverageExtraTest is Test, HelperContract { function testDeploymentWrappersAndHooksCoverage() public { RuleBlacklistHarness blacklist = new RuleBlacklistHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); - RuleWhitelistHarness whitelist = new RuleWhitelistHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + RuleWhitelistHarness whitelist = new RuleWhitelistHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); RuleWhitelistWrapperHarness wrapper = new RuleWhitelistWrapperHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); - RuleERC2980Harness erc2980 = new RuleERC2980Harness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); + RuleERC2980Harness erc2980 = new RuleERC2980Harness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); RuleSanctionsListHarness sanctions = new RuleSanctionsListHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, ISanctionsList(ZERO_ADDRESS)); RuleBlacklistOwnable2StepHarness blacklistOwnable = new RuleBlacklistOwnable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); RuleWhitelistOwnable2StepHarness whitelistOwnable = - new RuleWhitelistOwnable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + new RuleWhitelistOwnable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); RuleWhitelistWrapperOwnable2StepHarness wrapperOwnable = new RuleWhitelistWrapperOwnable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); RuleERC2980Ownable2StepHarness erc2980Ownable = - new RuleERC2980Ownable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); + new RuleERC2980Ownable2StepHarness(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); assertGe(blacklist.exposedMsgDataLength(), 4); assertGe(whitelist.exposedMsgDataLength(), 4); @@ -86,8 +89,11 @@ contract OperationCoverageExtraTest is Test, HelperContract { rule.created(ADDRESS1, 1); rule.destroyed(ADDRESS1, 1); - assertTrue(rule.supportsInterface(type(IRule).interfaceId)); assertTrue(rule.supportsInterface(RuleInterfaceId.IRULE_INTERFACE_ID)); + assertTrue(rule.supportsInterface(ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID)); + assertTrue(rule.supportsInterface(RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID)); + assertTrue(rule.supportsInterface(type(IERC7551Compliance).interfaceId)); + assertTrue(rule.supportsInterface(type(IERC3643ComplianceFull).interfaceId)); assertFalse(rule.supportsInterface(bytes4(0xdeadbeef))); } @@ -96,9 +102,12 @@ contract OperationCoverageExtraTest is Test, HelperContract { new RuleConditionalTransferLightOwnable2Step(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); vm.prank(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); - rule.approveTransfer(ADDRESS1, ADDRESS2, 77); + rule.bindToken(ADDRESS3); vm.prank(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); + rule.approveTransfer(ADDRESS1, ADDRESS2, 77); + + vm.prank(ADDRESS3); rule.transferred(ADDRESS3, ADDRESS1, ADDRESS2, 77); assertEq(rule.approvedCount(ADDRESS1, ADDRESS2, 77), 0); @@ -114,8 +123,11 @@ contract OperationCoverageExtraTest is Test, HelperContract { assertEq(rule.messageForTransferRestriction(CODE_NONEXISTENT), TEXT_CODE_NOT_FOUND); assertTrue(rule.supportsInterface(type(IERC165).interfaceId)); - assertTrue(rule.supportsInterface(type(IRule).interfaceId)); assertTrue(rule.supportsInterface(RuleInterfaceId.IRULE_INTERFACE_ID)); + assertTrue(rule.supportsInterface(ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID)); + assertTrue(rule.supportsInterface(RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID)); + assertTrue(rule.supportsInterface(type(IERC7551Compliance).interfaceId)); + assertTrue(rule.supportsInterface(type(IERC3643ComplianceFull).interfaceId)); assertFalse(rule.supportsInterface(bytes4(0xdeadbeef))); } } diff --git a/test/DeploymentScripts/DeployCMTATWithBlacklistAndSanctionsList.t.sol b/test/DeploymentScripts/DeployCMTATWithBlacklistAndSanctionsList.t.sol index 911fe97..35d1f9a 100644 --- a/test/DeploymentScripts/DeployCMTATWithBlacklistAndSanctionsList.t.sol +++ b/test/DeploymentScripts/DeployCMTATWithBlacklistAndSanctionsList.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {CMTATStandalone} from "CMTAT/deployment/CMTATStandalone.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleBlacklist} from "src/rules/validation/deployment/RuleBlacklist.sol"; import {RuleSanctionsList} from "src/rules/validation/deployment/RuleSanctionsList.sol"; import {ISanctionsList} from "src/rules/interfaces/ISanctionsList.sol"; diff --git a/test/HelperContract.sol b/test/HelperContract.sol index 21cc0d7..d7a11a0 100644 --- a/test/HelperContract.sol +++ b/test/HelperContract.sol @@ -5,7 +5,7 @@ import {CMTATStandalone} from "CMTAT/deployment/CMTATStandalone.sol"; // RuleEngine import {RuleEngineInvariantStorage} from "RuleEngine/modules/library/RuleEngineInvariantStorage.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; // RUleBlackList import {RuleBlacklist} from "src/rules/validation/deployment/RuleBlacklist.sol"; diff --git a/test/RuleBlacklist/CMTATIntegration.t.sol b/test/RuleBlacklist/CMTATIntegration.t.sol index 0c0cdf6..8bd6a1a 100644 --- a/test/RuleBlacklist/CMTATIntegration.t.sol +++ b/test/RuleBlacklist/CMTATIntegration.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {CMTATDeployment} from "RuleEngine/../test/utils/CMTATDeployment.sol"; import {RuleBlacklist} from "src/rules/validation/deployment/RuleBlacklist.sol"; diff --git a/test/RuleBlacklist/RuleEngineIntegration.t.sol b/test/RuleBlacklist/RuleEngineIntegration.t.sol index d876e59..345c31c 100644 --- a/test/RuleBlacklist/RuleEngineIntegration.t.sol +++ b/test/RuleBlacklist/RuleEngineIntegration.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {RuleBlacklist} from "src/rules/validation/deployment/RuleBlacklist.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; /** * @title Integration test between RuleEngine and RuleBlacklist diff --git a/test/RuleConditionalTransferLight/Ownable/RuleConditionalTransferLightOwnable2StepAccessControl.t.sol b/test/RuleConditionalTransferLight/Ownable/RuleConditionalTransferLightOwnable2StepAccessControl.t.sol index f44cd09..f0427e5 100644 --- a/test/RuleConditionalTransferLight/Ownable/RuleConditionalTransferLightOwnable2StepAccessControl.t.sol +++ b/test/RuleConditionalTransferLight/Ownable/RuleConditionalTransferLightOwnable2StepAccessControl.t.sol @@ -15,6 +15,8 @@ contract RuleConditionalTransferLightOwnable2StepAccessControl is Test, HelperCo function setUp() public { rule = new RuleConditionalTransferLightOwnable2Step(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); + vm.prank(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); + rule.bindToken(ADDRESS3); } function testOwnerCanApproveAndExecuteTransfer() public { @@ -22,7 +24,7 @@ contract RuleConditionalTransferLightOwnable2StepAccessControl is Test, HelperCo rule.approveTransfer(ADDRESS1, ADDRESS2, 10); assertEq(rule.approvedCount(ADDRESS1, ADDRESS2, 10), 1); - vm.prank(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); + vm.prank(ADDRESS3); rule.transferred(ADDRESS1, ADDRESS2, 10); assertEq(rule.approvedCount(ADDRESS1, ADDRESS2, 10), 0); } @@ -35,7 +37,9 @@ contract RuleConditionalTransferLightOwnable2StepAccessControl is Test, HelperCo vm.prank(CONDITIONAL_TRANSFER_OPERATOR_ADDRESS); rule.approveTransfer(ADDRESS1, ADDRESS2, 10); - vm.expectRevert(abi.encodeWithSelector(OwnableUnauthorizedAccount.selector, ATTACKER)); + vm.expectRevert( + abi.encodeWithSelector(RuleConditionalTransferLight_TransferExecutorUnauthorized.selector, ATTACKER) + ); vm.prank(ATTACKER); rule.transferred(ADDRESS1, ADDRESS2, 10); } diff --git a/test/RuleConditionalTransferLight/RuleConditionalTransferLightApproveAndTransfer.t.sol b/test/RuleConditionalTransferLight/RuleConditionalTransferLightApproveAndTransfer.t.sol index 2449845..21e296d 100644 --- a/test/RuleConditionalTransferLight/RuleConditionalTransferLightApproveAndTransfer.t.sol +++ b/test/RuleConditionalTransferLight/RuleConditionalTransferLightApproveAndTransfer.t.sol @@ -6,6 +6,7 @@ import {HelperContract} from "../HelperContract.sol"; import {RuleConditionalTransferLight} from "src/rules/operation/RuleConditionalTransferLight.sol"; import {MockERC20WithTransferContext} from "src/mocks/MockERC20WithTransferContext.sol"; import {MockERC20TransferFromFalse} from "src/mocks/MockERC20TransferFromFalse.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract RuleConditionalTransferLightApproveAndTransfer is Test, HelperContract { RuleConditionalTransferLight private rule; @@ -28,17 +29,18 @@ contract RuleConditionalTransferLightApproveAndTransfer is Test, HelperContract token.approve(address(rule), 10); vm.prank(DEFAULT_ADMIN_ADDRESS); - rule.approveAndTransferIfAllowed(address(token), ADDRESS1, ADDRESS2, 10); + rule.approveAndTransferIfAllowed(ADDRESS1, ADDRESS2, 10); assertEq(token.balanceOf(ADDRESS1), 90); assertEq(token.balanceOf(ADDRESS2), 10); assertEq(rule.approvedCount(ADDRESS1, ADDRESS2, 10), 0); } - function testApproveAndTransferIfAllowedRevertsOnZeroToken() public { - vm.expectRevert(RuleConditionalTransferLight_TokenAddressZeroNotAllowed.selector); + function testApproveAndTransferIfAllowedRevertsWhenNoTokenBound() public { + RuleConditionalTransferLight freshRule = new RuleConditionalTransferLight(DEFAULT_ADMIN_ADDRESS); + vm.expectRevert(RuleConditionalTransferLight_TokenNotBound.selector); vm.prank(DEFAULT_ADMIN_ADDRESS); - rule.approveAndTransferIfAllowed(ZERO_ADDRESS, ADDRESS1, ADDRESS2, 10); + freshRule.approveAndTransferIfAllowed(ADDRESS1, ADDRESS2, 10); } function testApproveAndTransferIfAllowedRevertsOnInsufficientAllowance() public { @@ -48,15 +50,20 @@ contract RuleConditionalTransferLightApproveAndTransfer is Test, HelperContract ) ); vm.prank(DEFAULT_ADMIN_ADDRESS); - rule.approveAndTransferIfAllowed(address(token), ADDRESS1, ADDRESS2, 10); + rule.approveAndTransferIfAllowed(ADDRESS1, ADDRESS2, 10); } function testApproveAndTransferIfAllowedRevertsOnTransferFailure() public { MockERC20TransferFromFalse failingToken = new MockERC20TransferFromFalse(); failingToken.setAllowance(ADDRESS1, address(rule), 10); - vm.expectRevert(RuleConditionalTransferLight_TransferFailed.selector); + vm.startPrank(DEFAULT_ADMIN_ADDRESS); + rule.unbindToken(address(token)); + rule.bindToken(address(failingToken)); + vm.stopPrank(); + + vm.expectRevert(abi.encodeWithSelector(SafeERC20.SafeERC20FailedOperation.selector, address(failingToken))); vm.prank(DEFAULT_ADMIN_ADDRESS); - rule.approveAndTransferIfAllowed(address(failingToken), ADDRESS1, ADDRESS2, 10); + rule.approveAndTransferIfAllowed(ADDRESS1, ADDRESS2, 10); } } diff --git a/test/RuleConditionalTransferLight/RuleConditionalTransferLightRuleEngineIntegration.t.sol b/test/RuleConditionalTransferLight/RuleConditionalTransferLightRuleEngineIntegration.t.sol index c7f96bc..e928bd1 100644 --- a/test/RuleConditionalTransferLight/RuleConditionalTransferLightRuleEngineIntegration.t.sol +++ b/test/RuleConditionalTransferLight/RuleConditionalTransferLightRuleEngineIntegration.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleConditionalTransferLight} from "src/rules/operation/RuleConditionalTransferLight.sol"; /** diff --git a/test/RuleConditionalTransferLight/RuleConditionalTransferLightUnit.t.sol b/test/RuleConditionalTransferLight/RuleConditionalTransferLightUnit.t.sol index d19f79b..882cacd 100644 --- a/test/RuleConditionalTransferLight/RuleConditionalTransferLightUnit.t.sol +++ b/test/RuleConditionalTransferLight/RuleConditionalTransferLightUnit.t.sol @@ -19,6 +19,19 @@ contract RuleConditionalTransferLightUnit is Test, HelperContract { new RuleConditionalTransferLight(address(0)); } + function testBindToken_RevertsIfAlreadyBound() public { + vm.expectRevert(RuleConditionalTransferLight_TokenAlreadyBound.selector); + vm.prank(DEFAULT_ADMIN_ADDRESS); + rule.bindToken(ADDRESS1); + } + + function testBindToken_RevertsForUnauthorizedCaller() public { + RuleConditionalTransferLight freshRule = new RuleConditionalTransferLight(DEFAULT_ADMIN_ADDRESS); + vm.expectRevert(); + vm.prank(ADDRESS1); + freshRule.bindToken(ADDRESS3); + } + function testApproveTransfer_OnlyOperator() public { vm.expectRevert(); vm.prank(ADDRESS1); diff --git a/test/RuleERC2980/AccessControl/RuleERC2980AccessControl.t.sol b/test/RuleERC2980/AccessControl/RuleERC2980AccessControl.t.sol index 5bc5bff..c963cf2 100644 --- a/test/RuleERC2980/AccessControl/RuleERC2980AccessControl.t.sol +++ b/test/RuleERC2980/AccessControl/RuleERC2980AccessControl.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; -import {IAccessControl} from "OZ/access/IAccessControl.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; import {HelperContract} from "../../HelperContract.sol"; import {RuleERC2980} from "src/rules/validation/deployment/RuleERC2980.sol"; @@ -20,7 +20,7 @@ contract RuleERC2980AccessControlTest is Test, HelperContract { function setUp() public { vm.startPrank(DEFAULT_ADMIN_ADDRESS); - ruleERC2980 = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); + ruleERC2980 = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); ruleERC2980.grantRole(WHITELIST_ADD, WHITELIST_OPERATOR); ruleERC2980.grantRole(WHITELIST_REMOVE, WHITELIST_OPERATOR); ruleERC2980.grantRole(FROZENLIST_ADD, FROZENLIST_OPERATOR); diff --git a/test/RuleERC2980/Ownable/RuleERC2980Ownable2Step.t.sol b/test/RuleERC2980/Ownable/RuleERC2980Ownable2Step.t.sol index 2e5b677..cf69419 100644 --- a/test/RuleERC2980/Ownable/RuleERC2980Ownable2Step.t.sol +++ b/test/RuleERC2980/Ownable/RuleERC2980Ownable2Step.t.sol @@ -9,7 +9,7 @@ import { contract RuleERC2980Ownable2StepTest is Ownable2StepTestBase { function _deployOwnable2Step() internal override returns (IOwnable2StepLike, address) { address ownerAddr = WHITELIST_OPERATOR_ADDRESS; - RuleERC2980Ownable2StepContract rule = new RuleERC2980Ownable2StepContract(ownerAddr, ZERO_ADDRESS); + RuleERC2980Ownable2StepContract rule = new RuleERC2980Ownable2StepContract(ownerAddr, ZERO_ADDRESS, false); return (IOwnable2StepLike(address(rule)), ownerAddr); } } diff --git a/test/RuleERC2980/Ownable/RuleERC2980OwnableAccessControl.t.sol b/test/RuleERC2980/Ownable/RuleERC2980OwnableAccessControl.t.sol index c465705..0660fe6 100644 --- a/test/RuleERC2980/Ownable/RuleERC2980OwnableAccessControl.t.sol +++ b/test/RuleERC2980/Ownable/RuleERC2980OwnableAccessControl.t.sol @@ -12,7 +12,7 @@ contract RuleERC2980OwnableAccessControl is Test, HelperContract { address constant OWNER = WHITELIST_OPERATOR_ADDRESS; function setUp() public { - rule = new RuleERC2980Ownable2Step(OWNER, ZERO_ADDRESS); + rule = new RuleERC2980Ownable2Step(OWNER, ZERO_ADDRESS, false); } /*////////////////////////////////////////////////////////////// @@ -132,4 +132,9 @@ contract RuleERC2980OwnableAccessControl is Test, HelperContract { vm.expectRevert(abi.encodeWithSelector(OwnableUnauthorizedAccount.selector, ATTACKER)); rule.addFrozenlistAddresses(addrs); } + + function testAllowBurnConstructorWhitelistsZeroAddress() public { + RuleERC2980Ownable2Step burnEnabled = new RuleERC2980Ownable2Step(OWNER, ZERO_ADDRESS, true); + assertTrue(burnEnabled.isWhitelisted(ZERO_ADDRESS)); + } } diff --git a/test/RuleERC2980/RuleERC2980.t.sol b/test/RuleERC2980/RuleERC2980.t.sol index f189de2..7009235 100644 --- a/test/RuleERC2980/RuleERC2980.t.sol +++ b/test/RuleERC2980/RuleERC2980.t.sol @@ -19,7 +19,7 @@ contract RuleERC2980Test is Test, HelperContract { function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleERC2980 = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); + ruleERC2980 = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); // Whitelist ADDRESS2 (recipient) so transfer tests can focus on the specific check vm.prank(DEFAULT_ADMIN_ADDRESS); @@ -104,6 +104,21 @@ contract RuleERC2980Test is Test, HelperContract { assertEq(resUint8, NO_ERROR); } + function testBurnRecipientNotWhitelistedByDefault() public { + assertFalse(ruleERC2980.whitelist(ZERO_ADDRESS)); + resUint8 = ruleERC2980.detectTransferRestriction(ADDRESS1, ZERO_ADDRESS, 20); + assertEq(resUint8, CODE_TO_NOT_WHITELISTED); + } + + function testAllowBurnConstructorWhitelistsZeroAddress() public { + vm.prank(DEFAULT_ADMIN_ADDRESS); + RuleERC2980 burnEnabledRule = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + + assertTrue(burnEnabledRule.whitelist(ZERO_ADDRESS)); + resUint8 = burnEnabledRule.detectTransferRestriction(ADDRESS1, ZERO_ADDRESS, 20); + assertEq(resUint8, NO_ERROR); + } + /*////////////////////////////////////////////////////////////// FROZENLIST — SENDER FROZEN //////////////////////////////////////////////////////////////*/ diff --git a/test/RuleIdentityRegistry/RuleIdentityRegistryRuleEngineIntegration.t.sol b/test/RuleIdentityRegistry/RuleIdentityRegistryRuleEngineIntegration.t.sol index 0d3446b..74488cf 100644 --- a/test/RuleIdentityRegistry/RuleIdentityRegistryRuleEngineIntegration.t.sol +++ b/test/RuleIdentityRegistry/RuleIdentityRegistryRuleEngineIntegration.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {IdentityRegistryMock} from "src/mocks/IdentityRegistryMock.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleIdentityRegistry} from "src/rules/validation/deployment/RuleIdentityRegistry.sol"; /** diff --git a/test/RuleMaxTotalSupply/RuleMaxTotalSupplyRuleEngineIntegration.t.sol b/test/RuleMaxTotalSupply/RuleMaxTotalSupplyRuleEngineIntegration.t.sol index 8307b59..a115320 100644 --- a/test/RuleMaxTotalSupply/RuleMaxTotalSupplyRuleEngineIntegration.t.sol +++ b/test/RuleMaxTotalSupply/RuleMaxTotalSupplyRuleEngineIntegration.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {TotalSupplyMock} from "src/mocks/TotalSupplyMock.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleMaxTotalSupply} from "src/rules/validation/deployment/RuleMaxTotalSupply.sol"; /** diff --git a/test/RuleSanctionList/RuleEngineIntegration.t.sol b/test/RuleSanctionList/RuleEngineIntegration.t.sol index 62e7a19..72f244f 100644 --- a/test/RuleSanctionList/RuleEngineIntegration.t.sol +++ b/test/RuleSanctionList/RuleEngineIntegration.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {SanctionListOracle} from "src/mocks/SanctionListOracle.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {RuleSanctionsList} from "src/rules/validation/deployment/RuleSanctionsList.sol"; /** diff --git a/test/RuleSpenderWhitelist/Ownable/RuleSpenderWhitelistOwnable2Step.t.sol b/test/RuleSpenderWhitelist/Ownable/RuleSpenderWhitelistOwnable2Step.t.sol index 3785f1e..7451467 100644 --- a/test/RuleSpenderWhitelist/Ownable/RuleSpenderWhitelistOwnable2Step.t.sol +++ b/test/RuleSpenderWhitelist/Ownable/RuleSpenderWhitelistOwnable2Step.t.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../../HelperContract.sol"; -import {Ownable} from "OZ/access/Ownable.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {RuleSpenderWhitelistOwnable2Step} from "src/rules/validation/deployment/RuleSpenderWhitelistOwnable2Step.sol"; import {RuleSpenderWhitelistOwnable2StepHarness} from "src/mocks/harness/RuleSpenderWhitelistHarnesses.sol"; diff --git a/test/RuleSpenderWhitelist/RuleSpenderWhitelist.t.sol b/test/RuleSpenderWhitelist/RuleSpenderWhitelist.t.sol index 5bd1f2c..075475b 100644 --- a/test/RuleSpenderWhitelist/RuleSpenderWhitelist.t.sol +++ b/test/RuleSpenderWhitelist/RuleSpenderWhitelist.t.sol @@ -5,8 +5,10 @@ import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {RuleSpenderWhitelist} from "src/rules/validation/deployment/RuleSpenderWhitelist.sol"; import {AccessControlModuleStandalone} from "src/modules/AccessControlModuleStandalone.sol"; -import {IAccessControl} from "OZ/access/IAccessControl.sol"; -import {IRule} from "RuleEngine/interfaces/IRule.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import {RuleInterfaceId} from "RuleEngine/modules/library/RuleInterfaceId.sol"; +import {ERC1404ExtendInterfaceId} from "CMTAT/library/ERC1404ExtendInterfaceId.sol"; +import {RuleEngineInterfaceId} from "CMTAT/library/RuleEngineInterfaceId.sol"; import {RuleSpenderWhitelistHarness} from "src/mocks/harness/RuleSpenderWhitelistHarnesses.sol"; contract RuleSpenderWhitelistTest is Test, HelperContract { @@ -88,7 +90,10 @@ contract RuleSpenderWhitelistTest is Test, HelperContract { function testSupportsInterface() public view { assertTrue(rule.supportsInterface(type(IAccessControl).interfaceId)); - assertTrue(rule.supportsInterface(type(IRule).interfaceId)); + assertTrue(rule.supportsInterface(RuleInterfaceId.IRULE_INTERFACE_ID)); + assertTrue(rule.supportsInterface(ERC1404ExtendInterfaceId.ERC1404EXTEND_INTERFACE_ID)); + assertTrue(rule.supportsInterface(RuleEngineInterfaceId.RULE_ENGINE_INTERFACE_ID)); + assertFalse(rule.supportsInterface(bytes4(0xdeadbeef))); } function testMetaTxOverridesAreReachable() public view { diff --git a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControl.t.sol b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControl.t.sol index c90a032..8f3a1cf 100644 --- a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControl.t.sol +++ b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControl.t.sol @@ -15,7 +15,7 @@ contract RuleWhitelistAccessControl is Test, HelperContract { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function testCannotAttackeraddAddress() public { diff --git a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlOZ.t.sol b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlOZ.t.sol index 73cfac9..9fbb5b3 100644 --- a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlOZ.t.sol +++ b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlOZ.t.sol @@ -13,7 +13,7 @@ contract RuleWhitelistAccessControlOZ is Test, HelperContract, AccessControl { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function testCanGrantRoleAsAdmin() public { diff --git a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlRoleMembers.t.sol b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlRoleMembers.t.sol index 0a7e4a8..48691d0 100644 --- a/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlRoleMembers.t.sol +++ b/test/RuleWhitelist/AccessControl/RuleWhitelistAccessControlRoleMembers.t.sol @@ -10,7 +10,7 @@ import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; contract RuleWhitelistAccessControlRoleMembers is AccessControlEnumerableTestBase { function _deployAccessControl() internal override returns (IAccessControlEnumerableLike, address) { address adminAddr = DEFAULT_ADMIN_ADDRESS; - RuleWhitelist rule = new RuleWhitelist(adminAddr, ZERO_ADDRESS, true); + RuleWhitelist rule = new RuleWhitelist(adminAddr, ZERO_ADDRESS, true, false); return (IAccessControlEnumerableLike(address(rule)), adminAddr); } diff --git a/test/RuleWhitelist/CMTATIntegration.t.sol b/test/RuleWhitelist/CMTATIntegration.t.sol index facee60..c861294 100644 --- a/test/RuleWhitelist/CMTATIntegration.t.sol +++ b/test/RuleWhitelist/CMTATIntegration.t.sol @@ -5,7 +5,7 @@ import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {CMTATDeployment} from "RuleEngine/../test/utils/CMTATDeployment.sol"; import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; /** * @title Integration test with the CMTAT @@ -18,7 +18,7 @@ contract CMTATIntegration is Test, HelperContract { // Arrange function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); // global arrange cmtatDeployment = new CMTATDeployment(); cmtatContract = cmtatDeployment.cmtat(); diff --git a/test/RuleWhitelist/CMTATIntegrationWhitelistWrapper.t.sol b/test/RuleWhitelist/CMTATIntegrationWhitelistWrapper.t.sol index cfd27a1..a102d90 100644 --- a/test/RuleWhitelist/CMTATIntegrationWhitelistWrapper.t.sol +++ b/test/RuleWhitelist/CMTATIntegrationWhitelistWrapper.t.sol @@ -6,7 +6,7 @@ import {HelperContract} from "../HelperContract.sol"; import {CMTATDeployment} from "RuleEngine/../test/utils/CMTATDeployment.sol"; import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; import {RuleWhitelistWrapper} from "src/rules/validation/deployment/RuleWhitelistWrapper.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; import {AccessControlModuleStandalone} from "../../src/modules/AccessControlModuleStandalone.sol"; /** * @title Integration test with the CMTAT @@ -24,9 +24,9 @@ contract CMTATIntegrationWhitelistWrapper is Test, HelperContract { // Arrange function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); - ruleWhitelist2 = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); - ruleWhitelist3 = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); + ruleWhitelist2 = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); + ruleWhitelist3 = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); ruleWhitelistWrapper = new RuleWhitelistWrapper(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); vm.prank(DEFAULT_ADMIN_ADDRESS); ruleWhitelistWrapper.addRule(ruleWhitelist); diff --git a/test/RuleWhitelist/CMTATRuleEngineIntegration.t.sol b/test/RuleWhitelist/CMTATRuleEngineIntegration.t.sol index 9858f97..6a5794d 100644 --- a/test/RuleWhitelist/CMTATRuleEngineIntegration.t.sol +++ b/test/RuleWhitelist/CMTATRuleEngineIntegration.t.sol @@ -5,7 +5,7 @@ import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {CMTATDeployment} from "RuleEngine/../test/utils/CMTATDeployment.sol"; import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; /** * @title Integration test with CMTAT + RuleEngine + RuleWhitelist @@ -15,7 +15,7 @@ contract CMTATRuleEngineIntegration is Test, HelperContract { function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); cmtatDeployment = new CMTATDeployment(); cmtatContract = cmtatDeployment.cmtat(); diff --git a/test/RuleWhitelist/Ownable/RuleWhitelistOwnable2Step.t.sol b/test/RuleWhitelist/Ownable/RuleWhitelistOwnable2Step.t.sol index 713e3e6..5ea43e5 100644 --- a/test/RuleWhitelist/Ownable/RuleWhitelistOwnable2Step.t.sol +++ b/test/RuleWhitelist/Ownable/RuleWhitelistOwnable2Step.t.sol @@ -9,7 +9,8 @@ import { contract RuleWhitelistOwnable2StepTest is Ownable2StepTestBase { function _deployOwnable2Step() internal override returns (IOwnable2StepLike, address) { address ownerAddr = WHITELIST_OPERATOR_ADDRESS; - RuleWhitelistOwnable2StepContract rule = new RuleWhitelistOwnable2StepContract(ownerAddr, ZERO_ADDRESS, true); + RuleWhitelistOwnable2StepContract rule = + new RuleWhitelistOwnable2StepContract(ownerAddr, ZERO_ADDRESS, true, false); return (IOwnable2StepLike(address(rule)), ownerAddr); } } diff --git a/test/RuleWhitelist/Ownable/RuleWhitelistOwnableAccessControl.t.sol b/test/RuleWhitelist/Ownable/RuleWhitelistOwnableAccessControl.t.sol index 72a8452..f3c95e7 100644 --- a/test/RuleWhitelist/Ownable/RuleWhitelistOwnableAccessControl.t.sol +++ b/test/RuleWhitelist/Ownable/RuleWhitelistOwnableAccessControl.t.sol @@ -8,7 +8,13 @@ import {RuleWhitelistOwnable2Step} from "src/rules/validation/deployment/RuleWhi contract RuleWhitelistOwnable2StepAccessControl is OwnableAddressListTestBase { function _deployAddressList() internal override returns (IAddressList, address) { address ownerAddr = WHITELIST_OPERATOR_ADDRESS; - RuleWhitelistOwnable2Step rule = new RuleWhitelistOwnable2Step(ownerAddr, ZERO_ADDRESS, true); + RuleWhitelistOwnable2Step rule = new RuleWhitelistOwnable2Step(ownerAddr, ZERO_ADDRESS, true, false); return (IAddressList(address(rule)), ownerAddr); } + + function testAllowMintBurnConstructorListsZeroAddress() public { + address ownerAddr = WHITELIST_OPERATOR_ADDRESS; + RuleWhitelistOwnable2Step rule = new RuleWhitelistOwnable2Step(ownerAddr, ZERO_ADDRESS, true, true); + assertTrue(rule.isAddressListed(ZERO_ADDRESS)); + } } diff --git a/test/RuleWhitelist/Ownable/RuleWhitelistOwnableCheckSpender.t.sol b/test/RuleWhitelist/Ownable/RuleWhitelistOwnableCheckSpender.t.sol index 628a698..e060c5b 100644 --- a/test/RuleWhitelist/Ownable/RuleWhitelistOwnableCheckSpender.t.sol +++ b/test/RuleWhitelist/Ownable/RuleWhitelistOwnableCheckSpender.t.sol @@ -11,7 +11,7 @@ contract RuleWhitelistOwnable2StepCheckSpender is Test, HelperContract { RuleWhitelistOwnable2Step rule; function setUp() public { - rule = new RuleWhitelistOwnable2Step(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + rule = new RuleWhitelistOwnable2Step(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function testOnlyOwnerCanSetCheckSpender() public { diff --git a/test/RuleWhitelist/Ownable/RuleWhitelistWrapperOwnable2Step.t.sol b/test/RuleWhitelist/Ownable/RuleWhitelistWrapperOwnable2Step.t.sol index 1b0dabf..3b21ebe 100644 --- a/test/RuleWhitelist/Ownable/RuleWhitelistWrapperOwnable2Step.t.sol +++ b/test/RuleWhitelist/Ownable/RuleWhitelistWrapperOwnable2Step.t.sol @@ -12,7 +12,7 @@ contract RuleWhitelistWrapperOwnable2StepTest is Ownable2StepTestBase { function _deployOwnable2Step() internal override returns (IOwnable2StepLike, address) { address ownerAddr = WHITELIST_OPERATOR_ADDRESS; wrapper = new RuleWhitelistWrapperOwnable2Step(ownerAddr, ZERO_ADDRESS, true); - rule = new RuleWhitelist(ownerAddr, ZERO_ADDRESS, true); + rule = new RuleWhitelist(ownerAddr, ZERO_ADDRESS, true, false); return (IOwnable2StepLike(address(wrapper)), ownerAddr); } diff --git a/test/RuleWhitelist/RuleEngineIntegration.t.sol b/test/RuleWhitelist/RuleEngineIntegration.t.sol index b88bd76..cd3f27d 100644 --- a/test/RuleWhitelist/RuleEngineIntegration.t.sol +++ b/test/RuleWhitelist/RuleEngineIntegration.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; /** * @title Integration test between RuleEngine and RuleWhitelist @@ -15,7 +15,7 @@ contract RuleEngineIntegration is Test, HelperContract { function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); vm.prank(DEFAULT_ADMIN_ADDRESS); ruleEngineMock = new RuleEngine(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); } diff --git a/test/RuleWhitelist/RuleWhitelist.t.sol b/test/RuleWhitelist/RuleWhitelist.t.sol index a33f457..40f7cb7 100644 --- a/test/RuleWhitelist/RuleWhitelist.t.sol +++ b/test/RuleWhitelist/RuleWhitelist.t.sol @@ -12,7 +12,7 @@ contract RuleWhitelistTest is Test, HelperContract { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function _addAddresses() internal { @@ -64,6 +64,12 @@ contract RuleWhitelistTest is Test, HelperContract { assertEq(resBool, true); } + function testAllowMintBurnConstructorListsZeroAddress() public { + vm.prank(WHITELIST_OPERATOR_ADDRESS); + RuleWhitelist burnEnabledRule = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, true); + assertTrue(burnEnabledRule.isAddressListed(ZERO_ADDRESS)); + } + function testContainsReflectsListingStatus() public { // Act - Assert assertFalse(ruleWhitelist.contains(ADDRESS1)); diff --git a/test/RuleWhitelist/RuleWhitelistAdd.t.sol b/test/RuleWhitelist/RuleWhitelistAdd.t.sol index f74bca3..a0bbf02 100644 --- a/test/RuleWhitelist/RuleWhitelistAdd.t.sol +++ b/test/RuleWhitelist/RuleWhitelistAdd.t.sol @@ -13,7 +13,7 @@ contract RuleWhitelistAddTest is Test, HelperContract { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function _addAddresses() internal { diff --git a/test/RuleWhitelist/RuleWhitelistDeployment.t.sol b/test/RuleWhitelist/RuleWhitelistDeployment.t.sol index 6c22ca8..83f3204 100644 --- a/test/RuleWhitelist/RuleWhitelistDeployment.t.sol +++ b/test/RuleWhitelist/RuleWhitelistDeployment.t.sol @@ -20,7 +20,7 @@ contract RuleWhitelistDeploymentTest is Test, HelperContract { MinimalForwarderMock forwarder = new MinimalForwarderMock(); forwarder.initialize(ERC2771ForwarderDomain); vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, address(forwarder), true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, address(forwarder), true, false); // assert resBool = ruleWhitelist.hasRole(ADDRESS_LIST_ADD_ROLE, WHITELIST_OPERATOR_ADDRESS); @@ -38,6 +38,6 @@ contract RuleWhitelistDeploymentTest is Test, HelperContract { forwarder.initialize(ERC2771ForwarderDomain); vm.expectRevert(AccessControlModuleStandalone.AccessControlModuleStandalone_AddressZeroNotAllowed.selector); vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(address(0), address(forwarder), true); + ruleWhitelist = new RuleWhitelist(address(0), address(forwarder), true, false); } } diff --git a/test/RuleWhitelist/RuleWhitelistRemove.t.sol b/test/RuleWhitelist/RuleWhitelistRemove.t.sol index 8f90c21..470f638 100644 --- a/test/RuleWhitelist/RuleWhitelistRemove.t.sol +++ b/test/RuleWhitelist/RuleWhitelistRemove.t.sol @@ -13,7 +13,7 @@ contract RuleWhitelistRemoveTest is Test, HelperContract { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); } function _addAddresses() internal { diff --git a/test/RuleWhitelist/RuleWhitelistWrapperRuleEngineIntegration.t.sol b/test/RuleWhitelist/RuleWhitelistWrapperRuleEngineIntegration.t.sol index 1645c07..555c609 100644 --- a/test/RuleWhitelist/RuleWhitelistWrapperRuleEngineIntegration.t.sol +++ b/test/RuleWhitelist/RuleWhitelistWrapperRuleEngineIntegration.t.sol @@ -5,7 +5,7 @@ import {Test} from "forge-std/Test.sol"; import {HelperContract} from "../HelperContract.sol"; import {RuleWhitelist} from "src/rules/validation/deployment/RuleWhitelist.sol"; import {RuleWhitelistWrapper} from "src/rules/validation/deployment/RuleWhitelistWrapper.sol"; -import {RuleEngine} from "RuleEngine/RuleEngine.sol"; +import {RuleEngine} from "RuleEngine/deployment/RuleEngine.sol"; /** * @title Integration test between RuleEngine and RuleWhitelistWrapper @@ -15,7 +15,7 @@ contract RuleWhitelistWrapperRuleEngineIntegration is Test, HelperContract { function setUp() public { vm.prank(DEFAULT_ADMIN_ADDRESS); - ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); vm.prank(DEFAULT_ADMIN_ADDRESS); ruleWhitelistWrapper = new RuleWhitelistWrapper(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); vm.prank(DEFAULT_ADMIN_ADDRESS); diff --git a/test/RuleWhitelist/WhitelistWrapper.t.sol b/test/RuleWhitelist/WhitelistWrapper.t.sol index 430b649..0a668f9 100644 --- a/test/RuleWhitelist/WhitelistWrapper.t.sol +++ b/test/RuleWhitelist/WhitelistWrapper.t.sol @@ -24,9 +24,9 @@ contract CMTATIntegrationWhitelistWrapper is Test, HelperContract { // Arrange function setUp() public { vm.prank(WHITELIST_OPERATOR_ADDRESS); - ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); - ruleWhitelist2 = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); - ruleWhitelist3 = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + ruleWhitelist = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); + ruleWhitelist2 = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); + ruleWhitelist3 = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); ruleWhitelistWrapper = new RuleWhitelistWrapper(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); vm.prank(WHITELIST_OPERATOR_ADDRESS); ruleWhitelistWrapper.addRule(ruleWhitelist); @@ -342,7 +342,7 @@ contract CMTATIntegrationWhitelistWrapper is Test, HelperContract { function testInternalTransferredSpenderOverload() public { RuleWhitelistWrapperHarnessInternal wrapperHarness = new RuleWhitelistWrapperHarnessInternal(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); - RuleWhitelist child = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true); + RuleWhitelist child = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, true, false); vm.prank(WHITELIST_OPERATOR_ADDRESS); wrapperHarness.addRule(child); diff --git a/test/TransferContext/TransferContext.t.sol b/test/TransferContext/TransferContext.t.sol index 203eb4e..46d86d7 100644 --- a/test/TransferContext/TransferContext.t.sol +++ b/test/TransferContext/TransferContext.t.sol @@ -16,7 +16,7 @@ contract TransferContextTest is Test, HelperContract { function _deployWhitelistRule() internal returns (RuleWhitelist) { vm.prank(WHITELIST_OPERATOR_ADDRESS); - RuleWhitelist rule = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, false); + RuleWhitelist rule = new RuleWhitelist(WHITELIST_OPERATOR_ADDRESS, ZERO_ADDRESS, false, false); vm.prank(WHITELIST_OPERATOR_ADDRESS); rule.addAddress(ADDRESS1); vm.prank(WHITELIST_OPERATOR_ADDRESS); diff --git a/test/TransferContext/TransferContextMocks.t.sol b/test/TransferContext/TransferContextMocks.t.sol index 7a6ba96..8716d85 100644 --- a/test/TransferContext/TransferContextMocks.t.sol +++ b/test/TransferContext/TransferContextMocks.t.sol @@ -19,7 +19,7 @@ contract TransferContextMocksTest is Test, HelperContract { function _deployWhitelistRule() internal returns (RuleWhitelist) { vm.prank(DEFAULT_ADMIN_ADDRESS); - RuleWhitelist rule = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); + RuleWhitelist rule = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false, false); vm.startPrank(DEFAULT_ADMIN_ADDRESS); rule.addAddress(ADDRESS1); rule.addAddress(ADDRESS2); diff --git a/test/Version.t.sol b/test/Version.t.sol index 10e5b0e..9bc8030 100644 --- a/test/Version.t.sol +++ b/test/Version.t.sol @@ -13,10 +13,10 @@ import {RuleERC2980} from "src/rules/validation/deployment/RuleERC2980.sol"; import {RuleConditionalTransferLight} from "src/rules/operation/RuleConditionalTransferLight.sol"; contract VersionTest is Test, HelperContract { - string constant EXPECTED_VERSION = "0.2.0"; + string constant EXPECTED_VERSION = "0.3.0"; function testVersionRuleWhitelist() public { - RuleWhitelist rule = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true); + RuleWhitelist rule = new RuleWhitelist(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, true, false); assertEq(rule.version(), EXPECTED_VERSION); } @@ -42,7 +42,7 @@ contract VersionTest is Test, HelperContract { } function testVersionRuleERC2980() public { - RuleERC2980 rule = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS); + RuleERC2980 rule = new RuleERC2980(DEFAULT_ADMIN_ADDRESS, ZERO_ADDRESS, false); assertEq(rule.version(), EXPECTED_VERSION); } diff --git a/test/hardhat/smoke.test.js b/test/hardhat/smoke.test.js new file mode 100644 index 0000000..3fe93d9 --- /dev/null +++ b/test/hardhat/smoke.test.js @@ -0,0 +1,18 @@ +const { expect } = require("chai"); +const { ethers } = require("hardhat"); + +describe("Hardhat smoke", function () { + it("compiles and deploys RuleWhitelist", async function () { + const [admin, listed] = await ethers.getSigners(); + + const RuleWhitelist = await ethers.getContractFactory("RuleWhitelist"); + const rule = await RuleWhitelist.deploy(admin.address, ethers.ZeroAddress, true, false); + await rule.waitForDeployment(); + + expect(await rule.listedAddressCount()).to.equal(0n); + + await rule.addAddress(listed.address); + expect(await rule.isAddressListed(listed.address)).to.equal(true); + }); +}); +