diff --git a/.github/workflows/certora_passkey.yml b/.github/workflows/certora_passkey.yml new file mode 100644 index 00000000..626a6612 --- /dev/null +++ b/.github/workflows/certora_passkey.yml @@ -0,0 +1,66 @@ +name: certora + +on: + push: + branches: + - main + paths: + - modules/passkey/** + pull_request: + branches: + - main + paths: + - modules/passkey/** + + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + strategy: + matrix: + rule: + [ + 'GetConfigurationConf', + 'GetSigner', + 'ProxySimulator', + 'SafeWebAuthnSignerFactory', + 'SafeWebAuthnSignerProxy', + 'SafeWebAuthnSignerSingleton', + 'SignerCreationCantOverride', + 'SingletonIsValidSignatureRevertingConditions', + 'ValidSignatureForSignerIntegrity', + 'VerifyEQtoIsValidSignatureForSigner', + 'WebAuthn', + ] + steps: + - uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Install python + uses: actions/setup-python@v4 + with: { python-version: 3.11 } + + - name: Install certora cli + run: pip install -r modules/passkey/certora/requirements.txt + + - name: Install solc + run: | + wget https://github.com/ethereum/solidity/releases/download/v0.8.26/solc-static-linux + chmod +x solc-static-linux + sudo mv solc-static-linux /usr/local/bin/solc8.26 + + - name: Install dependencies + run: pnpm install + + - name: Verify rule ${{ matrix.rule }} + working-directory: ./modules/passkey + run: | + echo "Certora key length" ${#CERTORAKEY} + certoraRun certora/conf/${{ matrix.rule }}.conf --wait_for_results=all + env: + CERTORAKEY: ${{ secrets.CERTORA_KEY }} diff --git a/examples/4337-gas-metering/package.json b/examples/4337-gas-metering/package.json index 5c6a42ef..905209c6 100644 --- a/examples/4337-gas-metering/package.json +++ b/examples/4337-gas-metering/package.json @@ -52,15 +52,15 @@ "@alchemy/aa-alchemy": "3.19.0", "@alchemy/aa-core": "3.19.0", "@gelatonetwork/relay-sdk": "^5.5.6", - "alchemy-sdk": "3.4.3", + "alchemy-sdk": "3.5.0", "dotenv": "^16.4.5", "ethers": "^6.13.4", "permissionless": "0.1.45", - "viem": "2.21.25" + "viem": "2.21.51" }, "devDependencies": { "@types/node": "^20.14.10", - "tsx": "4.19.1", - "typescript": "^5.6.3" + "tsx": "4.19.2", + "typescript": "^5.7.2" } } diff --git a/examples/4337-passkeys/package.json b/examples/4337-passkeys/package.json index 55c76d8e..3a4bd0c5 100644 --- a/examples/4337-passkeys/package.json +++ b/examples/4337-passkeys/package.json @@ -14,7 +14,7 @@ "@account-abstraction/contracts": "0.7.0", "@safe-global/safe-4337": "0.3.0", "@safe-global/safe-contracts": "1.4.1-2", - "@safe-global/safe-deployments": "^1.37.10", + "@safe-global/safe-deployments": "^1.37.18", "@safe-global/safe-modules-deployments": "^2.2.4", "@safe-global/safe-passkey": "workspace:^0.2.1-1", "@web3modal/ethers": "^4.1.11", @@ -24,12 +24,12 @@ "react-router-dom": "^6.27.0" }, "devDependencies": { - "@types/react": "^18.3.11", + "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react-swc": "^3.7.1", + "@vitejs/plugin-react-swc": "^3.7.2", "react-router": "^6.27.0", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "vite": "^5.4.8", - "vite-plugin-commonjs": "^0.10.3" + "vite-plugin-commonjs": "^0.10.4" } } diff --git a/modules/4337/certora/requirements.txt b/modules/4337/certora/requirements.txt index 31db1d46..2c02690c 100644 --- a/modules/4337/certora/requirements.txt +++ b/modules/4337/certora/requirements.txt @@ -1 +1 @@ -certora-cli==7.17.2 +certora-cli==7.21.1 diff --git a/modules/4337/package.json b/modules/4337/package.json index 128c7522..992ec90b 100644 --- a/modules/4337/package.json +++ b/modules/4337/package.json @@ -24,6 +24,7 @@ "benchmark": "pnpm run test test/gas/*.ts", "deploy-all": "hardhat deploy-contracts --network", "deploy": "hardhat deploy --network", + "deploy-custom": "rm -rf deployments/custom && npm run deploy custom", "lint": "pnpm run lint:sol && npm run lint:ts", "lint:sol": "solhint 'contracts/**/*.sol'", "lint:ts": "eslint ./src && eslint ./test", @@ -47,28 +48,28 @@ "url": "https://github.com/safe-global/safe-modules/issues" }, "devDependencies": { - "@noble/curves": "^1.6.0", + "@noble/curves": "^1.7.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-network-helpers": "^1.0.12", "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^5.0.2", + "@openzeppelin/contracts": "^5.1.0", "@safe-global/safe-4337-local-bundler": "workspace:^0.0.0", "@safe-global/safe-4337-provider": "workspace:^0.0.0", "@types/chai": "^4.3.19", - "@types/mocha": "^10.0.9", + "@types/mocha": "^10.0.10", "@types/node": "^20.14.10", "@types/yargs": "^17.0.33", "cbor": "^9.0.2", "debug": "^4.3.7", "dotenv": "^16.4.5", "ethers": "^6.13.4", - "hardhat": "^2.22.13", + "hardhat": "^2.22.16", "hardhat-deploy": "^0.12.4", - "husky": "^9.1.6", + "husky": "^9.1.7", "solc": "0.8.23", "solhint": "^5.0.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "yargs": "^17.7.2" }, "dependencies": { diff --git a/modules/allowances/.env.sample b/modules/allowances/.env.sample index c3c43746..d069fcb9 100644 --- a/modules/allowances/.env.sample +++ b/modules/allowances/.env.sample @@ -1,3 +1,4 @@ MNEMONIC= INFURA_KEY= ETHERSCAN_API_KEY= +CUSTOM_NODE_URL= diff --git a/modules/allowances/hardhat.config.ts b/modules/allowances/hardhat.config.ts index 66fab4dd..834d076f 100644 --- a/modules/allowances/hardhat.config.ts +++ b/modules/allowances/hardhat.config.ts @@ -9,7 +9,7 @@ import { getSingletonFactoryInfo } from '@safe-global/safe-singleton-factory' dotenv.config() -const { INFURA_KEY, MNEMONIC, ETHERSCAN_API_KEY } = process.env +const { INFURA_KEY, MNEMONIC, ETHERSCAN_API_KEY, CUSTOM_NODE_URL } = process.env const sharedNetworkConfig: HttpNetworkUserConfig = { accounts: { @@ -19,6 +19,15 @@ const sharedNetworkConfig: HttpNetworkUserConfig = { }, } +const customNetwork = CUSTOM_NODE_URL + ? { + custom: { + ...sharedNetworkConfig, + url: CUSTOM_NODE_URL, + }, + } + : {} + const config: HardhatUserConfig = { paths: { artifacts: 'build/artifacts', @@ -78,6 +87,7 @@ const config: HardhatUserConfig = { ...sharedNetworkConfig, url: `https://api.avax.network/ext/bc/C/rpc`, }, + ...customNetwork, }, deterministicDeployment, namedAccounts: { diff --git a/modules/allowances/package.json b/modules/allowances/package.json index 1eb9b591..39ed3b59 100644 --- a/modules/allowances/package.json +++ b/modules/allowances/package.json @@ -14,6 +14,7 @@ "test": "hardhat test", "coverage": "hardhat coverage", "deploy": "hardhat deploy-verify --network", + "deploy-custom": "rm -rf deployments/custom && npm run deploy custom", "prepare": "pnpm run clean && npm run build", "lint": "pnpm run lint:sol && npm run lint:ts", "lint:sol": "solhint 'contracts/**/*.sol'", @@ -35,22 +36,22 @@ "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/contracts": "^5.0.2", "@safe-global/safe-contracts": "1.4.1-2", - "@safe-global/safe-deployments": "^1.37.10", + "@safe-global/safe-deployments": "^1.37.18", "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", - "@types/mocha": "^10.0.9", + "@types/mocha": "^10.0.10", "@types/node": "^20.14.10", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", "dotenv": "^16.4.5", "eslint": "^8.57.0", "ethers": "^6.13.4", - "hardhat": "^2.22.13", + "hardhat": "^2.22.16", "hardhat-deploy": "^0.12.4", "solhint": "^5.0.3", "solidity-coverage": "^0.8.13", "ts-node": "^10.9.2", "typechain": "^8.3.2", - "typescript": "^5.6.3" + "typescript": "^5.7.2" } } diff --git a/modules/passkey/certora/conf/GetConfigurationConf.conf b/modules/passkey/certora/conf/GetConfigurationConf.conf new file mode 100644 index 00000000..376e99bc --- /dev/null +++ b/modules/passkey/certora/conf/GetConfigurationConf.conf @@ -0,0 +1,25 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/munged/SafeWebAuthnSignerSingleton.sol", + "certora/harnesses/GetConfigurationProxyHarness.sol", + "contracts/SafeWebAuthnSignerFactory.sol" + ], + "link": [ + "GetConfigurationProxyHarness:_SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "prover_args": [ + " -split false" + ], + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "GetConfigurationProxyHarness:certora/specs/GetConfigurationSpec.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/GetSigner.conf b/modules/passkey/certora/conf/GetSigner.conf new file mode 100644 index 00000000..47b76324 --- /dev/null +++ b/modules/passkey/certora/conf/GetSigner.conf @@ -0,0 +1,23 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/harnesses/GetSignerHarness.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/SafeWebAuthnSignerProxy.sol" + ], + "hashing_length_bound": "4694", + "link": [ + "GetSignerHarness:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "144", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "GetSignerHarness:certora/specs/GetSigner.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/ProxySimulator.conf b/modules/passkey/certora/conf/ProxySimulator.conf new file mode 100644 index 00000000..2b690656 --- /dev/null +++ b/modules/passkey/certora/conf/ProxySimulator.conf @@ -0,0 +1,27 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/harnesses/ProxySimulator.sol", + "contracts/SafeWebAuthnSignerProxy.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/libraries/P256.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "hashing_length_bound": "2048", + "link": [ + "ProxySimulator:_proxy=SafeWebAuthnSignerProxy", + "SafeWebAuthnSignerProxy:_VERIFIERS=P256", + "SafeWebAuthnSignerProxy:_SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "ProxySimulator:certora/specs/ProxySimulator.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/SafeWebAuthnSignerFactory.conf b/modules/passkey/certora/conf/SafeWebAuthnSignerFactory.conf new file mode 100644 index 00000000..edd74628 --- /dev/null +++ b/modules/passkey/certora/conf/SafeWebAuthnSignerFactory.conf @@ -0,0 +1,30 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/harnesses/FactoryHarnessForSignerConsistency.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/SafeWebAuthnSignerProxy.sol" + ], + "link": [ + "FactoryHarnessForSignerConsistency:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "rule": [ + "createAndGetSignerEquivalence", + "getSignerRevertingConditions", + "hasNoCodeIntegrity", + "isValidSignatureForSignerConsistency", + "singletonNeverChanges" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "FactoryHarnessForSignerConsistency:certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/SafeWebAuthnSignerProxy.conf b/modules/passkey/certora/conf/SafeWebAuthnSignerProxy.conf new file mode 100644 index 00000000..878ade7a --- /dev/null +++ b/modules/passkey/certora/conf/SafeWebAuthnSignerProxy.conf @@ -0,0 +1,23 @@ +{ + "assert_autofinder_success": true, + "files": [ + "contracts/SafeWebAuthnSignerProxy.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/libraries/P256.sol" + ], + "link": [ + "SafeWebAuthnSignerProxy:_VERIFIERS=P256", + "SafeWebAuthnSignerProxy:_SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerProxy:certora/specs/SafeWebAuthnSignerProxy.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/SafeWebAuthnSignerSingleton.conf b/modules/passkey/certora/conf/SafeWebAuthnSignerSingleton.conf new file mode 100644 index 00000000..5b287008 --- /dev/null +++ b/modules/passkey/certora/conf/SafeWebAuthnSignerSingleton.conf @@ -0,0 +1,23 @@ +{ + "assert_autofinder_success": true, + "files": [ + "contracts/SafeWebAuthnSignerFactory.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/libraries/P256.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "link": [ + "SafeWebAuthnSignerFactory:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerSingleton:certora/specs/SafeWebAuthnSignerSingleton.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/SignerCreationCantOverride.conf b/modules/passkey/certora/conf/SignerCreationCantOverride.conf new file mode 100644 index 00000000..1fd022f8 --- /dev/null +++ b/modules/passkey/certora/conf/SignerCreationCantOverride.conf @@ -0,0 +1,31 @@ +{ + "assert_autofinder_success": true, + "exclude_rule": [ + "createAndVerifyEQtoIsValidSignatureForSigner" + ], + "files": [ + "certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/SafeWebAuthnSignerProxy.sol", + "contracts/libraries/P256.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "hashing_length_bound": "912", + "link": [ + "SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule": [ + "SignerCreationCantOverride" + ], + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactory.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/SingletonIsValidSignatureRevertingConditions.conf b/modules/passkey/certora/conf/SingletonIsValidSignatureRevertingConditions.conf new file mode 100644 index 00000000..669c773e --- /dev/null +++ b/modules/passkey/certora/conf/SingletonIsValidSignatureRevertingConditions.conf @@ -0,0 +1,23 @@ +{ + "assert_autofinder_success": true, + "files": [ + "contracts/SafeWebAuthnSignerFactory.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/libraries/P256.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule": [ + "isValidSignatureRevertingConditions" + ], + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerSingleton:certora/specs/SafeWebAuthnSignerSingleton.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/ValidSignatureForSignerIntegrity.conf b/modules/passkey/certora/conf/ValidSignatureForSignerIntegrity.conf new file mode 100644 index 00000000..2c7b962f --- /dev/null +++ b/modules/passkey/certora/conf/ValidSignatureForSignerIntegrity.conf @@ -0,0 +1,26 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "contracts/SafeWebAuthnSignerProxy.sol" + ], + "link": [ + "SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule": [ + "isValidSignatureForSignerIntegrity" + ], + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactory.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/VerifyEQtoIsValidSignatureForSigner.conf b/modules/passkey/certora/conf/VerifyEQtoIsValidSignatureForSigner.conf new file mode 100644 index 00000000..12d76bcc --- /dev/null +++ b/modules/passkey/certora/conf/VerifyEQtoIsValidSignatureForSigner.conf @@ -0,0 +1,33 @@ +{ + "assert_autofinder_success": true, + "dynamic_bound": "1", + "files": [ + "certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol", + "contracts/SafeWebAuthnSignerSingleton.sol", + "certora/munged/SafeWebAuthnSignerProxy.sol", + "certora/munged/WebAuthn.sol", + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "hashing_length_bound": "906", + "link": [ + "SafeWebAuthnSignerFactoryHarness:SINGLETON=SafeWebAuthnSignerSingleton" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "prover_args": [ + "-depth 12" + ], + "rule": [ + "createAndVerifyEQtoIsValidSignatureForSigner" + ], + "rule_sanity": "basic", + "smt_timeout": "600", + "solc": "solc8.26", + "verify": "SafeWebAuthnSignerFactoryHarness:certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/conf/WebAuthn.conf b/modules/passkey/certora/conf/WebAuthn.conf new file mode 100644 index 00000000..4172b58d --- /dev/null +++ b/modules/passkey/certora/conf/WebAuthn.conf @@ -0,0 +1,17 @@ +{ + "assert_autofinder_success": true, + "files": [ + "certora/harnesses/WebAuthnHarnessWithMunge.sol" + ], + "loop_iter": "6", + "optimistic_hashing": true, + "optimistic_loop": true, + "packages": [ + "@safe-global=node_modules/@safe-global", + "@account-abstraction=node_modules/@account-abstraction" + ], + "process": "emv", + "rule_sanity": "basic", + "solc": "solc8.26", + "verify": "WebAuthnHarnessWithMunge:certora/specs/WebAuthn.spec" +} \ No newline at end of file diff --git a/modules/passkey/certora/harnesses/FactoryHarnessForSignerConsistency.sol b/modules/passkey/certora/harnesses/FactoryHarnessForSignerConsistency.sol new file mode 100644 index 00000000..fd584e3a --- /dev/null +++ b/modules/passkey/certora/harnesses/FactoryHarnessForSignerConsistency.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {SafeWebAuthnSignerFactory} from "../munged/FactoryForSignerConsistency.sol"; +import {P256} from "../../contracts/libraries/P256.sol"; +import {SafeWebAuthnSignerProxy} from "../../contracts/SafeWebAuthnSignerProxy.sol"; + +contract FactoryHarnessForSignerConsistency is SafeWebAuthnSignerFactory { + //Harness + function hasNoCode(address account) external view returns (bool result) { + // solhint-disable-next-line no-inline-assembly + return SafeWebAuthnSignerFactory._hasNoCode(account); + } + + function createAndVerify( + bytes32 message, + bytes calldata signature, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) external returns (bytes4 magicValue) { + address signer = this.createSigner(x, y, verifiers); + + bytes memory data = abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature); + + // Use low-level call to invoke isValidSignature on the signer address + (bool success, bytes memory result) = signer.staticcall(data); + require(success); + magicValue = abi.decode(result, (bytes4)); + } + + /** + munge to pass the SignerCreationCantOverride rule. + */ + function _hasNoCode(address account) internal view override returns (bool result) { + return account.code.length == 0; + } +} diff --git a/modules/passkey/certora/harnesses/GetConfigurationProxyHarness.sol b/modules/passkey/certora/harnesses/GetConfigurationProxyHarness.sol new file mode 100644 index 00000000..05c17bc1 --- /dev/null +++ b/modules/passkey/certora/harnesses/GetConfigurationProxyHarness.sol @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: LGPL-3.0-only +/* solhint-disable no-complex-fallback */ +pragma solidity >=0.8.0; + +import {P256} from "../../contracts/libraries/WebAuthn.sol"; + +/** + * @title Safe WebAuthn Signer Proxy + * @dev A specialized proxy to a {SafeWebAuthnSignerSingleton} signature validator implementation + * for Safe accounts. Using a proxy pattern for the signature validator greatly reduces deployment + * gas costs. + * @custom:security-contact bounty@safe.global + */ +contract GetConfigurationProxyHarness { + /** + * @notice The {SafeWebAuthnSignerSingleton} implementation to proxy to. + */ + address internal immutable _SINGLETON; + + /** + * @notice The x coordinate of the P-256 public key of the WebAuthn credential. + */ + uint256 internal immutable _X; + + /** + * @notice The y coordinate of the P-256 public key of the WebAuthn credential. + */ + uint256 internal immutable _Y; + + /** + * @notice The P-256 verifiers used for ECDSA signature verification. + */ + P256.Verifiers internal immutable _VERIFIERS; + + function getX() external view returns (uint256) { + return _X; + } + function getY() external view returns (uint256) { + return _Y; + } + function getVerifiers() external view returns (P256.Verifiers) { + return _VERIFIERS; + } + + /** + * @notice Creates a new WebAuthn Safe Signer Proxy. + * @param singleton The {SafeWebAuthnSignerSingleton} implementation to proxy to. + * @param x The x coordinate of the P-256 public key of the WebAuthn credential. + * @param y The y coordinate of the P-256 public key of the WebAuthn credential. + * @param verifiers The P-256 verifiers used for ECDSA signature verification. + */ + constructor(address singleton, uint256 x, uint256 y, P256.Verifiers verifiers) { + _SINGLETON = singleton; + _X = x; + _Y = y; + _VERIFIERS = verifiers; + } + + /** + * @dev Fallback function forwards all transactions and returns all received return data. + */ + //fallback() external payable { + function getConfiguration() external returns (uint256 x, uint256 y, P256.Verifiers verifiers) { + address singleton = _SINGLETON; + uint256 x = _X; + uint256 y = _Y; + P256.Verifiers verifiers = _VERIFIERS; + + // solhint-disable-next-line no-inline-assembly + assembly { + // Forward the call to the singleton implementation. We append the configuration to the + // calldata instead of having the singleton implementation read it from storage. This is + // both more gas efficient and required for ERC-4337 compatibility. Note that we append + // the configuration fields in reverse order since the fields are packed, and this makes + // it so we don't need to mask any bits from the `verifiers` value. This computes `data` + // to be `abi.encodePacked(msg.data, x, y, verifiers)`. + let data := mload(0x40) + mstore(add(data, add(calldatasize(), 0x36)), verifiers) + mstore(add(data, add(calldatasize(), 0x20)), y) + mstore(add(data, calldatasize()), x) + calldatacopy(data, 0x00, calldatasize()) + + let success := staticcall(gas(), singleton, data, add(calldatasize(), 0x56), 0, 0) + returndatacopy(0, 0, returndatasize()) + if iszero(success) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} diff --git a/modules/passkey/certora/harnesses/GetSignerHarness.sol b/modules/passkey/certora/harnesses/GetSignerHarness.sol new file mode 100644 index 00000000..8766656d --- /dev/null +++ b/modules/passkey/certora/harnesses/GetSignerHarness.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {SafeWebAuthnSignerFactory} from "../munged/SafeWebAuthnSignerFactory.sol"; +import {P256} from "../../contracts/libraries/P256.sol"; +import {SafeWebAuthnSignerProxy} from "../../contracts/SafeWebAuthnSignerProxy.sol"; + +contract GetSignerHarness is SafeWebAuthnSignerFactory { + function getSignerHarnessed(uint256 x, uint256 y, P256.Verifiers verifiers) public view returns (uint256 value) { + bytes32 codeHash = keccak256( + abi.encodePacked( + type(SafeWebAuthnSignerProxy).creationCode, + "01234567891011121314152546", + uint256(uint160(address(SINGLETON))), + x, + y, + uint256(P256.Verifiers.unwrap(verifiers)) + ) + ); + value = uint256(keccak256(abi.encodePacked(hex"ff", address(this), bytes32(0), codeHash))); + } + function castToAddress(uint256 value) public pure returns (address addr) { + addr = address(uint160(value)); + } + + /** + * munged getSigner + */ + function getSigner(uint256 x, uint256 y, P256.Verifiers verifiers) public view override returns (address signer) { + bytes32 codeHash = keccak256( + abi.encodePacked( + type(SafeWebAuthnSignerProxy).creationCode, + "01234567891011121314152546", // munged for word alignment workaround (32 bytes) + uint256(uint160(address(SINGLETON))), + x, + y, + uint256(P256.Verifiers.unwrap(verifiers)) + ) + ); + signer = address(uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(this), bytes32(0), codeHash))))); + } +} diff --git a/modules/passkey/certora/harnesses/ProxySimulator.sol b/modules/passkey/certora/harnesses/ProxySimulator.sol new file mode 100644 index 00000000..4d5bec7b --- /dev/null +++ b/modules/passkey/certora/harnesses/ProxySimulator.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: LGPL-3.0-only +/* solhint-disable no-complex-fallback */ +pragma solidity >=0.8.0; + +import {SafeWebAuthnSignerProxy} from "../../contracts/SafeWebAuthnSignerProxy.sol"; + +contract ProxySimulator { + address internal _proxy; + + constructor(address proxy) { + _proxy = proxy; + } + + function authenticate(bytes32 message, bytes calldata signature) external returns (bytes4) { + bytes memory data = abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature); + + (bool success, bytes memory result) = _proxy.call(data); + + require(success); + + return abi.decode(result, (bytes4)); + } +} diff --git a/modules/passkey/certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol b/modules/passkey/certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol new file mode 100644 index 00000000..c7a12e1c --- /dev/null +++ b/modules/passkey/certora/harnesses/SafeWebAuthnSignerFactoryHarness.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {SafeWebAuthnSignerFactory} from "../munged/SafeWebAuthnSignerFactory.sol"; +import {P256} from "../../contracts/libraries/P256.sol"; +import {SafeWebAuthnSignerProxy} from "../../contracts/SafeWebAuthnSignerProxy.sol"; + +contract SafeWebAuthnSignerFactoryHarness is SafeWebAuthnSignerFactory { + //Harness + function hasNoCode(address account) external view returns (bool result) { + // solhint-disable-next-line no-inline-assembly + return SafeWebAuthnSignerFactory._hasNoCode(account); + } + + function createAndVerify( + bytes32 message, + bytes calldata signature, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) external returns (bytes4 magicValue) { + address signer = this.createSigner(x, y, verifiers); + + bytes memory data = abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature); + + // Use low-level call to invoke isValidSignature on the signer address + (bool success, bytes memory result) = signer.staticcall(data); + require(success); + magicValue = abi.decode(result, (bytes4)); + } + + /** + munge to pass the SignerCreationCantOverride rule. + */ + function _hasNoCode(address account) internal view override returns (bool result) { + return account.code.length == 0; + } +} diff --git a/modules/passkey/certora/harnesses/Utilities.sol b/modules/passkey/certora/harnesses/Utilities.sol new file mode 100644 index 00000000..1f2b7b30 --- /dev/null +++ b/modules/passkey/certora/harnesses/Utilities.sol @@ -0,0 +1,20 @@ +import {P256} from "../../contracts/libraries/WebAuthn.sol"; + +interface IConfigHolder { + function getConfiguration() external pure returns (uint256 x, uint256 y, P256.Verifiers verifiers); +} + +contract Utilities { + function havocAll() external { + (bool success, ) = address(0xdeadbeef).call(abi.encodeWithSelector(0x12345678)); + require(success); + } + + function justRevert() external { + revert(); + } + + function getConfiguration(address proxy) external view returns (uint256 x, uint256 y, P256.Verifiers verifiers) { + return IConfigHolder(proxy).getConfiguration(); + } +} diff --git a/modules/passkey/certora/harnesses/WebAuthnHarness.sol b/modules/passkey/certora/harnesses/WebAuthnHarness.sol new file mode 100644 index 00000000..2f178713 --- /dev/null +++ b/modules/passkey/certora/harnesses/WebAuthnHarness.sol @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import {P256, WebAuthn} from "../../contracts/libraries/WebAuthn.sol"; + +contract WebAuthnHarness { + mapping(bytes32 => mapping(bytes32 => string)) symbolicClientDataJson; + + function summaryEncodeDataJson(bytes32 challenge, string calldata clientDataFields) public returns (string memory) { + bytes32 hashClientDataFields = keccak256(abi.encodePacked(clientDataFields)); + string memory stringResult = symbolicClientDataJson[challenge][hashClientDataFields]; + bytes32 hashResult = keccak256(abi.encodePacked(stringResult)); + + require(checkInjective(challenge, hashClientDataFields, hashResult)); + + return stringResult; + } + + function checkInjective(bytes32 challenge, bytes32 clientDataFields, bytes32 result) internal view returns (bool) { + return true; + } + + function compareSignatures(WebAuthn.Signature memory sig1, WebAuthn.Signature memory sig2) public pure returns (bool) { + if (sig1.r != sig2.r || sig1.s != sig2.s) { + return false; + } + + if (keccak256(abi.encodePacked(sig1.clientDataFields)) != keccak256(abi.encodePacked(sig2.clientDataFields))) { + return false; + } + + if (keccak256(sig1.authenticatorData) != keccak256(sig2.authenticatorData)) { + return false; + } + + return true; + } + + function encodeSignature(WebAuthn.Signature calldata sig) external pure returns (bytes memory signature) { + signature = abi.encode(sig.authenticatorData, sig.clientDataFields, sig.r, sig.s); + } + + function castSignature(bytes calldata signature) external pure returns (bool isValid, WebAuthn.Signature calldata data) { + return WebAuthn.castSignature(signature); + } + + function castSignatureSuccess(bytes32 unused, bytes calldata signature) external pure returns (bool) { + (bool isValid, ) = WebAuthn.castSignature(signature); + return isValid; + } + + function castSignature_notreturns(bytes calldata signature) external pure { + WebAuthn.castSignature(signature); + } + + function compareStrings(string memory str1, string memory str2) public view returns (bool) { + bytes memory str1Bytes = bytes(str1); + bytes memory str2Bytes = bytes(str2); + return getSha256(str1Bytes) == getSha256(str2Bytes); + } + + function encodeClientDataJson(bytes32 challenge, string calldata clientDataFields) public pure returns (string memory clientDataJson) { + return WebAuthn.encodeClientDataJson(challenge, clientDataFields); + } + + function encodeSigningMessage( + bytes32 challenge, + bytes calldata authenticatorData, + string calldata clientDataFields + ) public view returns (bytes memory message) { + return WebAuthn.encodeSigningMessage(challenge, authenticatorData, clientDataFields); + } + + function checkAuthenticatorFlags( + bytes calldata authenticatorData, + WebAuthn.AuthenticatorFlags authenticatorFlags + ) public pure returns (bool success) { + return WebAuthn.checkAuthenticatorFlags(authenticatorData, authenticatorFlags); + } + + function prepareSignature( + bytes calldata authenticatorData, + string calldata clientDataFields, + uint256 r, + uint256 s + ) public pure returns (bytes memory signature, WebAuthn.Signature memory structSignature) { + signature = abi.encode(authenticatorData, clientDataFields, r, s); + structSignature = WebAuthn.Signature(authenticatorData, clientDataFields, r, s); + } + + function verifySignature( + bytes32 challenge, + bytes calldata signature, + WebAuthn.AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) public view returns (bool success) { + return WebAuthn.verifySignature(challenge, signature, authenticatorFlags, x, y, verifiers); + } + + function verifySignature( + bytes32 challenge, + WebAuthn.Signature calldata signature, + WebAuthn.AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) public view returns (bool success) { + return WebAuthn.verifySignature(challenge, signature, authenticatorFlags, x, y, verifiers); + } + + function getSha256(bytes memory input) public view returns (bytes32 digest) { + return WebAuthn._sha256(input); + } + + mapping(bytes32 => mapping(bytes32 => mapping(bytes32 => bytes))) symbolicMessageSummary; + + function GETencodeSigningMessageSummary( + bytes32 challenge, + bytes calldata authenticatorData, + string calldata clientDataFields + ) public returns (bytes memory) { + bytes32 hashed_authenticatorData = keccak256(authenticatorData); + bytes32 hashed_clientDataFields = keccak256(abi.encodePacked(clientDataFields)); + + bytes memory bytes_mapping = symbolicMessageSummary[challenge][hashed_authenticatorData][hashed_clientDataFields]; + + require(checkInjective(challenge, hashed_authenticatorData, hashed_clientDataFields, keccak256(bytes_mapping))); + + return bytes_mapping; + } + + function checkInjective( + bytes32 challenge, + bytes32 authenticatorData, + bytes32 clientDataFields, + bytes32 result + ) internal view returns (bool) { + return true; + } +} diff --git a/modules/passkey/certora/harnesses/WebAuthnHarnessWithMunge.sol b/modules/passkey/certora/harnesses/WebAuthnHarnessWithMunge.sol new file mode 100644 index 00000000..d50eb437 --- /dev/null +++ b/modules/passkey/certora/harnesses/WebAuthnHarnessWithMunge.sol @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import {P256, WebAuthn} from "../munged/WebAuthn.sol"; + +contract WebAuthnHarnessWithMunge { + mapping(bytes32 => mapping(bytes32 => string)) symbolicClientDataJson; + + function summaryEncodeDataJson(bytes32 challenge, string calldata clientDataFields) public returns (string memory) { + bytes32 hashClientDataFields = keccak256(abi.encodePacked(clientDataFields)); + string memory stringResult = symbolicClientDataJson[challenge][hashClientDataFields]; + bytes32 hashResult = keccak256(abi.encodePacked(stringResult)); + + require(checkInjective(challenge, hashClientDataFields, hashResult)); + + return stringResult; + } + + function checkInjective(bytes32 challenge, bytes32 clientDataFields, bytes32 result) internal view returns (bool) { + return true; + } + + function compareSignatures(WebAuthn.Signature memory sig1, WebAuthn.Signature memory sig2) public pure returns (bool) { + if (sig1.r != sig2.r || sig1.s != sig2.s) { + return false; + } + + if (keccak256(abi.encodePacked(sig1.clientDataFields)) != keccak256(abi.encodePacked(sig2.clientDataFields))) { + return false; + } + + if (keccak256(sig1.authenticatorData) != keccak256(sig2.authenticatorData)) { + return false; + } + + return true; + } + + function encodeSignature(WebAuthn.Signature calldata sig) external pure returns (bytes memory signature) { + signature = abi.encode(sig.authenticatorData, sig.clientDataFields, sig.r, sig.s); + } + + function castSignature(bytes calldata signature) external pure returns (bool isValid, WebAuthn.Signature calldata data) { + return WebAuthn.castSignature(signature); + } + + function castSignatureSuccess(bytes32 unused, bytes calldata signature) external pure returns (bool) { + (bool isValid, ) = WebAuthn.castSignature(signature); + return isValid; + } + + function castSignature_notreturns(bytes calldata signature) external pure { + WebAuthn.castSignature(signature); + } + + function compareStrings(string memory str1, string memory str2) public view returns (bool) { + bytes memory str1Bytes = bytes(str1); + bytes memory str2Bytes = bytes(str2); + return getSha256(str1Bytes) == getSha256(str2Bytes); + } + + function encodeClientDataJson(bytes32 challenge, string calldata clientDataFields) public pure returns (string memory clientDataJson) { + return WebAuthn.encodeClientDataJson(challenge, clientDataFields); + } + + function encodeSigningMessage( + bytes32 challenge, + bytes calldata authenticatorData, + string calldata clientDataFields + ) public view returns (bytes memory message) { + return WebAuthn.encodeSigningMessage(challenge, authenticatorData, clientDataFields); + } + + function checkAuthenticatorFlags( + bytes calldata authenticatorData, + WebAuthn.AuthenticatorFlags authenticatorFlags + ) public pure returns (bool success) { + return WebAuthn.checkAuthenticatorFlags(authenticatorData, authenticatorFlags); + } + + function prepareSignature( + bytes calldata authenticatorData, + string calldata clientDataFields, + uint256 r, + uint256 s + ) public pure returns (bytes memory signature, WebAuthn.Signature memory structSignature) { + signature = abi.encode(authenticatorData, clientDataFields, r, s); + structSignature = WebAuthn.Signature(authenticatorData, clientDataFields, r, s); + } + + function verifySignature( + bytes32 challenge, + bytes calldata signature, + WebAuthn.AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) public view returns (bool success) { + return WebAuthn.verifySignature(challenge, signature, authenticatorFlags, x, y, verifiers); + } + + function verifySignature( + bytes32 challenge, + WebAuthn.Signature calldata signature, + WebAuthn.AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) public view returns (bool success) { + return WebAuthn.verifySignature(challenge, signature, authenticatorFlags, x, y, verifiers); + } + + function getSha256(bytes memory input) public view returns (bytes32 digest) { + return WebAuthn._sha256(input); + } + + mapping(bytes32 => mapping(bytes32 => mapping(bytes32 => bytes))) symbolicMessageSummary; + + function GETencodeSigningMessageSummary( + bytes32 challenge, + bytes calldata authenticatorData, + string calldata clientDataFields + ) public returns (bytes memory) { + bytes32 hashed_authenticatorData = keccak256(authenticatorData); + bytes32 hashed_clientDataFields = keccak256(abi.encodePacked(clientDataFields)); + + bytes memory bytes_mapping = symbolicMessageSummary[challenge][hashed_authenticatorData][hashed_clientDataFields]; + + require(checkInjective(challenge, hashed_authenticatorData, hashed_clientDataFields, keccak256(bytes_mapping))); + + return bytes_mapping; + } + + function checkInjective( + bytes32 challenge, + bytes32 authenticatorData, + bytes32 clientDataFields, + bytes32 result + ) internal view returns (bool) { + return true; + } +} diff --git a/modules/passkey/certora/munged/FactoryForSignerConsistency.sol b/modules/passkey/certora/munged/FactoryForSignerConsistency.sol new file mode 100644 index 00000000..71582890 --- /dev/null +++ b/modules/passkey/certora/munged/FactoryForSignerConsistency.sol @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {ISafeSignerFactory} from "../../contracts/interfaces/ISafeSignerFactory.sol"; +import {SafeWebAuthnSignerProxy} from "../../contracts/SafeWebAuthnSignerProxy.sol"; +import {SafeWebAuthnSignerSingleton} from "../../contracts/SafeWebAuthnSignerSingleton.sol"; +import {P256} from "../../contracts/libraries/P256.sol"; + +/** + * @title Safe WebAuthn Signer Factory + * @dev A factory contract for creating WebAuthn signers. Additionally, the factory supports + * signature verification without deploying a signer proxies. + * @custom:security-contact bounty@safe.global + */ +contract SafeWebAuthnSignerFactory is ISafeSignerFactory { + /** + * @notice The {SafeWebAuthnSignerSingleton} implementation to that is used for signature + * verification by this contract and any proxies it deploys. + */ + SafeWebAuthnSignerSingleton public immutable SINGLETON; + + /** + * @notice Creates a new WebAuthn Safe signer factory contract. + * @dev The {SafeWebAuthnSignerSingleton} singleton implementation is created with as part of + * this constructor. This ensures that the singleton contract is known, and lets us make certain + * assumptions about how it works. + */ + constructor() { + SINGLETON = new SafeWebAuthnSignerSingleton(); + } + + /** + * @inheritdoc ISafeSignerFactory + */ + // funtion is not really virtual, Munged! + function getSigner(uint256 x, uint256 y, P256.Verifiers verifiers) public view virtual override returns (address signer) { + bytes32 codeHash = keccak256( + abi.encodePacked( + type(SafeWebAuthnSignerProxy).creationCode, + uint256(uint160(address(SINGLETON))), + x, + y, + uint256(P256.Verifiers.unwrap(verifiers)) + ) + ); + signer = address(uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(this), bytes32(0), codeHash))))); + } + + /** + * @inheritdoc ISafeSignerFactory + */ + function createSigner(uint256 x, uint256 y, P256.Verifiers verifiers) external returns (address signer) { + signer = getSigner(x, y, verifiers); + + if (_hasNoCode(signer)) { + SafeWebAuthnSignerProxy created = new SafeWebAuthnSignerProxy{salt: bytes32(0)}(address(SINGLETON), x, y, verifiers); + assert(address(created) == signer); + emit Created(signer, x, y, verifiers); + } + } + + /** + * @inheritdoc ISafeSignerFactory + */ + function isValidSignatureForSigner( + bytes32 message, + bytes calldata signature, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) external view override returns (bytes4 magicValue) { + address singleton = address(SINGLETON); + bytes memory data = abi.encodePacked( + abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature), + x, + y, + verifiers + ); + + // solhint-disable-next-line no-inline-assembly + assembly { + // staticcall to the singleton contract with return size given as 32 bytes. The + // singleton contract is known and immutable so it is safe to specify return size. + if staticcall(gas(), singleton, add(data, 0x20), mload(data), 0, 32) { + magicValue := mload(0) + } + } + } + + /** + * @dev Checks if the provided account has no code. + * @param account The address of the account to check. + * @return result True if the account has no code, false otherwise. + */ + // funtion is not really virtual, munged! + function _hasNoCode(address account) internal view virtual returns (bool result) { + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + result := iszero(extcodesize(account)) + } + } +} diff --git a/modules/passkey/certora/munged/SafeWebAuthnSignerFactory.sol b/modules/passkey/certora/munged/SafeWebAuthnSignerFactory.sol new file mode 100644 index 00000000..9f6ef9b7 --- /dev/null +++ b/modules/passkey/certora/munged/SafeWebAuthnSignerFactory.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {ISafeSignerFactory} from "../../contracts/interfaces/ISafeSignerFactory.sol"; +import {SafeWebAuthnSignerProxy} from "./SafeWebAuthnSignerProxy.sol"; +import {SafeWebAuthnSignerSingleton} from "./SafeWebAuthnSignerSingleton.sol"; +import {P256} from "../../contracts/libraries/P256.sol"; + +/** + * @title Safe WebAuthn Signer Factory + * @dev A factory contract for creating WebAuthn signers. Additionally, the factory supports + * signature verification without deploying a signer proxies. + * @custom:security-contact bounty@safe.global + */ +contract SafeWebAuthnSignerFactory is ISafeSignerFactory { + /** + * @notice The {SafeWebAuthnSignerSingleton} implementation to that is used for signature + * verification by this contract and any proxies it deploys. + */ + SafeWebAuthnSignerSingleton public immutable SINGLETON; + + /** + * @notice Creates a new WebAuthn Safe signer factory contract. + * @dev The {SafeWebAuthnSignerSingleton} singleton implementation is created with as part of + * this constructor. This ensures that the singleton contract is known, and lets us make certain + * assumptions about how it works. + */ + constructor() { + SINGLETON = new SafeWebAuthnSignerSingleton(); + } + + /** + * @inheritdoc ISafeSignerFactory + */ + // funtion is not really virtual, Munged! + function getSigner(uint256 x, uint256 y, P256.Verifiers verifiers) public view virtual override returns (address signer) { + bytes32 codeHash = keccak256( + abi.encodePacked( + type(SafeWebAuthnSignerProxy).creationCode, + uint256(uint160(address(SINGLETON))), + x, + y, + uint256(P256.Verifiers.unwrap(verifiers)) + ) + ); + signer = address(uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(this), bytes32(0), codeHash))))); + } + + /** + * @inheritdoc ISafeSignerFactory + */ + function createSigner(uint256 x, uint256 y, P256.Verifiers verifiers) external returns (address signer) { + signer = getSigner(x, y, verifiers); + + if (_hasNoCode(signer)) { + SafeWebAuthnSignerProxy created = new SafeWebAuthnSignerProxy{salt: bytes32(0)}(address(SINGLETON), x, y, verifiers); + assert(address(created) == signer); + emit Created(signer, x, y, verifiers); + } + } + + /** + * @inheritdoc ISafeSignerFactory + */ + function isValidSignatureForSigner( + bytes32 message, + bytes calldata signature, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) external view override returns (bytes4 magicValue) { + address singleton = address(SINGLETON); + bytes memory data = abi.encodePacked( + abi.encodeWithSignature("isValidSignature(bytes32,bytes)", message, signature), + x, + y, + verifiers + ); + + // solhint-disable-next-line no-inline-assembly + assembly { + // staticcall to the singleton contract with return size given as 32 bytes. The + // singleton contract is known and immutable so it is safe to specify return size. + // MUNGED!! + // if staticcall(gas(), singleton, add(data, 0x20), mload(data), 0, 32) { + // magicValue := mload(0) + // } + if staticcall(gas(), singleton, add(data, 0x20), mload(data), mload(0x40), 32) { + magicValue := mload(mload(0x40)) + } + } + } + + /** + * @dev Checks if the provided account has no code. + * @param account The address of the account to check. + * @return result True if the account has no code, false otherwise. + */ + // funtion is not really virtual, munged! + function _hasNoCode(address account) internal view virtual returns (bool result) { + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + result := iszero(extcodesize(account)) + } + } +} diff --git a/modules/passkey/certora/munged/SafeWebAuthnSignerProxy.sol b/modules/passkey/certora/munged/SafeWebAuthnSignerProxy.sol new file mode 100644 index 00000000..7dbae901 --- /dev/null +++ b/modules/passkey/certora/munged/SafeWebAuthnSignerProxy.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: LGPL-3.0-only +/* solhint-disable no-complex-fallback */ +pragma solidity >=0.8.0; + +import {P256} from "./WebAuthn.sol"; + +/** + * @title Safe WebAuthn Signer Proxy + * @dev A specialized proxy to a {SafeWebAuthnSignerSingleton} signature validator implementation + * for Safe accounts. Using a proxy pattern for the signature validator greatly reduces deployment + * gas costs. + * @custom:security-contact bounty@safe.global + */ +contract SafeWebAuthnSignerProxy { + /** + * @notice The {SafeWebAuthnSignerSingleton} implementation to proxy to. + */ + address internal immutable _SINGLETON; + + /** + * @notice The x coordinate of the P-256 public key of the WebAuthn credential. + */ + uint256 internal immutable _X; + + /** + * @notice The y coordinate of the P-256 public key of the WebAuthn credential. + */ + uint256 internal immutable _Y; + + /** + * @notice The P-256 verifiers used for ECDSA signature verification. + */ + P256.Verifiers internal immutable _VERIFIERS; + + /** + * @notice Creates a new WebAuthn Safe Signer Proxy. + * @param singleton The {SafeWebAuthnSignerSingleton} implementation to proxy to. + * @param x The x coordinate of the P-256 public key of the WebAuthn credential. + * @param y The y coordinate of the P-256 public key of the WebAuthn credential. + * @param verifiers The P-256 verifiers used for ECDSA signature verification. + */ + constructor(address singleton, uint256 x, uint256 y, P256.Verifiers verifiers) { + _SINGLETON = singleton; + _X = x; + _Y = y; + _VERIFIERS = verifiers; + } + + /** + * @dev Fallback function forwards all transactions and returns all received return data. + */ + fallback() external payable { + address singleton = _SINGLETON; + uint256 x = _X; + uint256 y = _Y; + P256.Verifiers verifiers = _VERIFIERS; + + // solhint-disable-next-line no-inline-assembly + assembly { + // Forward the call to the singleton implementation. We append the configuration to the + // calldata instead of having the singleton implementation read it from storage. This is + // both more gas efficient and required for ERC-4337 compatibility. Note that we append + // the configuration fields in reverse order since the fields are packed, and this makes + // it so we don't need to mask any bits from the `verifiers` value. This computes `data` + // to be `abi.encodePacked(msg.data, x, y, verifiers)`. + let data := mload(0x40) + // MUNGED mstore(add(data, add(calldatasize(), 0x36)), verifiers) + mstore(add(data, add(calldatasize(), 0x40)), shl(80, verifiers)) + mstore(add(data, add(calldatasize(), 0x20)), y) + mstore(add(data, calldatasize()), x) + calldatacopy(data, 0x00, calldatasize()) + + let success := delegatecall(gas(), singleton, data, add(calldatasize(), 0x56), 0, 0) + returndatacopy(0, 0, returndatasize()) + if iszero(success) { + revert(0, returndatasize()) + } + return(0, returndatasize()) + } + } +} diff --git a/modules/passkey/certora/munged/SafeWebAuthnSignerSingleton.sol b/modules/passkey/certora/munged/SafeWebAuthnSignerSingleton.sol new file mode 100644 index 00000000..b37f59a6 --- /dev/null +++ b/modules/passkey/certora/munged/SafeWebAuthnSignerSingleton.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity >=0.8.0; + +import {SignatureValidator} from "../../contracts/base/SignatureValidator.sol"; +import {P256, WebAuthn} from "../../contracts/libraries/WebAuthn.sol"; + +/** + * @title Safe WebAuthn Signer Singleton + * @dev A singleton contract that implements WebAuthn signature verification. This singleton + * contract must be used with the specialized proxy {SafeWebAuthnSignerProxy}, as it encodes the + * credential configuration (public key coordinates and P-256 verifier to use) in calldata, which is + * required by this implementation. + * @custom:security-contact bounty@safe.global + */ +contract SafeWebAuthnSignerSingleton is SignatureValidator { + /** + * @inheritdoc SignatureValidator + */ + function _verifySignature(bytes32 message, bytes calldata signature) internal view virtual override returns (bool success) { + (uint256 x, uint256 y, P256.Verifiers verifiers) = getConfiguration(); + success = WebAuthn.verifySignature(message, signature, WebAuthn.USER_VERIFICATION, x, y, verifiers); + } + + /** + * @notice Returns the x coordinate, y coordinate, and P-256 verifiers used for ECDSA signature + * validation. The values are expected to appended to calldata by the caller. See the + * {SafeWebAuthnSignerProxy} contract implementation. + * @return x The x coordinate of the P-256 public key. + * @return y The y coordinate of the P-256 public key. + * @return verifiers The P-256 verifiers. + */ + function getConfiguration() public pure returns (uint256 x, uint256 y, P256.Verifiers verifiers) { + // solhint-disable-next-line no-inline-assembly + // solhint-disable-next-line no-inline-assembly + // MUNGED! - Added new line + uint256 mask = type(uint176).max; + assembly ("memory-safe") { + x := calldataload(sub(calldatasize(), 86)) + y := calldataload(sub(calldatasize(), 54)) + // MUNGED! Original line is - verifiers := shr(80, calldataload(sub(calldatasize(), 22))) + verifiers := and(mask, calldataload(sub(calldatasize(), 32))) + } + } +} diff --git a/modules/passkey/certora/munged/WebAuthn.sol b/modules/passkey/certora/munged/WebAuthn.sol new file mode 100644 index 00000000..14daefb6 --- /dev/null +++ b/modules/passkey/certora/munged/WebAuthn.sol @@ -0,0 +1,360 @@ +// SPDX-License-Identifier: LGPL-3.0-only +pragma solidity ^0.8.0; + +import {P256} from "../../contracts/libraries/P256.sol"; + +/** + * @title WebAuthn Signature Verification + * @dev Library for verifying WebAuthn signatures for public key credentials using the ES256 + * algorithm with the P-256 curve. + * @custom:security-contact bounty@safe.global + */ +library WebAuthn { + using P256 for P256.Verifiers; + + /** + * @notice The WebAuthn signature data format. + * @dev WebAuthn signatures are expected to be the ABI-encoded bytes of the following structure. + * @param authenticatorData The authenticator data from the WebAuthn credential assertion. + * @param clientDataFields The additional fields from the client data JSON. This is the comma + * separated fields as they appear in the client data JSON from the WebAuthn credential + * assertion after the leading {type} and {challenge} fields. + * @param r The ECDSA signature's R component. + * @param s The ECDSA signature's S component. + */ + struct Signature { + bytes authenticatorData; + string clientDataFields; + uint256 r; + uint256 s; + } + + /** + * @notice A WebAuthn authenticator bit-flags + * @dev Represents flags that are included in a WebAuthn assertion's authenticator data and can + * be used to check on-chain how the user was authorized by the device when signing. + */ + type AuthenticatorFlags is bytes1; + + /** + * @notice Authenticator data flag indicating user presence (UP). + * @dev A test of user presence is a simple form of authorization gesture and technical process + * where a user interacts with an authenticator by (typically) simply touching it (other + * modalities may also exist), yielding a Boolean result. Note that this does not constitute + * user verification because a user presence test, by definition, is not capable of biometric + * recognition, nor does it involve the presentation of a shared secret such as a password or + * PIN. + * + * See . + */ + AuthenticatorFlags internal constant USER_PRESENCE = AuthenticatorFlags.wrap(0x01); + + /** + * @notice Authenticator data flag indicating user verification (UV). + * @dev The technical process by which an authenticator locally authorizes the invocation of the + * authenticatorMakeCredential and authenticatorGetAssertion operations. User verification MAY + * be instigated through various authorization gesture modalities; for example, through a touch + * plus pin code, password entry, or biometric recognition (e.g., presenting a fingerprint). The + * intent is to distinguish individual users. + * + * Note that user verification does not give the Relying Party a concrete identification of the + * user, but when 2 or more ceremonies with user verification have been done with that + * credential it expresses that it was the same user that performed all of them. The same user + * might not always be the same natural person, however, if multiple natural persons share + * access to the same authenticator. + * + * See . + */ + AuthenticatorFlags internal constant USER_VERIFICATION = AuthenticatorFlags.wrap(0x04); + + /** + * @notice Casts calldata bytes to a WebAuthn signature data structure. + * @param signature The calldata bytes of the WebAuthn signature. + * @return isValid Whether or not the encoded signature bytes is valid. + * @return data A pointer to the signature data in calldata. + * @dev This method casts the dynamic bytes array to a signature calldata pointer with some + * additional verification. Specifically, we ensure that the signature bytes encoding is no + * larger than standard ABI encoding form, to prevent attacks where valid signatures are padded + * with 0s in order to increase signature verifications the costs for ERC-4337 user operations. + */ + function castSignature(bytes calldata signature) internal pure returns (bool isValid, Signature calldata data) { + uint256 authenticatorDataLength; + uint256 clientDataFieldsLength; + // MUNGED Initiating isValid for future usage + isValid = true; + + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + data := signature.offset + + // Read the lengths of the dynamic byte arrays in assembly. This is done because + // Solidity generates calldata bounds checks which aren't required for the security of + // the signature verification, as it can only lead to _shorter_ signatures which are + // are less gas expensive anyway. + + // MUNGED To simplify prover execution + let t1 := calldataload(data) + isValid := and(isValid, lt(t1, signature.length)) + authenticatorDataLength := calldataload(add(data, t1)) + let t2 := calldataload(add(data, 0x20)) + isValid := and(isValid, lt(t2, signature.length)) + clientDataFieldsLength := calldataload(add(data, calldataload(add(data, 0x20)))) + } + + // Use of unchecked math as any overflows in dynamic length computations would cause + // out-of-gas reverts when computing the WebAuthn signing message. + unchecked { + // Allow for signature encodings where the dynamic bytes are aligned to 32-byte + // boundaries. This allows for high interoperability (as this is how Solidity and most + // tools `abi.encode`s the `Signature` struct) while setting a strict upper bound to how + // many additional padding bytes can be added to the signature, increasing gas costs. + // Note that we compute the aligned lengths with the formula: `l + 0x1f & ~0x1f`, which + // rounds `l` up to the next 32-byte boundary. + uint256 alignmentMask = ~uint256(0x1f); + uint256 authenticatorDataAlignedLength = (authenticatorDataLength + 0x1f) & alignmentMask; + uint256 clientDataFieldsAlignedLength = (clientDataFieldsLength + 0x1f) & alignmentMask; + + // The fixed parts of the signature length are 6 32-byte words for a total of 192 bytes: + // - offset of the `authenticatorData` bytes + // - offset of the `clientDataFields` string + // - signature `r` value + // - signature `s` value + // - length of the `authenticatorData` bytes + // - length of the `clientDataFields` string + // + // This implies that the signature length must be less than or equal to: + // 192 + authenticatorDataAlignedLength + clientDataFieldsAlignedLength + // which is equivalent to strictly less than: + // 193 + authenticatorDataAlignedLength + clientDataFieldsAlignedLength + + // MUNGED To simplify prover execution + isValid = isValid && signature.length < 193 + authenticatorDataAlignedLength + clientDataFieldsAlignedLength; + } + } + + /** + * @notice Encodes the client data JSON string from the specified challenge, and additional + * client data fields. + * @dev The client data JSON follows a very specific encoding process outlined in the Web + * Authentication standard. See . + * @param challenge The WebAuthn challenge used for the credential assertion. + * @param clientDataFields Client data fields. + * @return clientDataJson The encoded client data JSON. + */ + function encodeClientDataJson( + bytes32 challenge, + string calldata clientDataFields + ) internal pure returns (string memory clientDataJson) { + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + // The length of the encoded JSON string. This is always 82 plus the length of the + // additional client data fields: + // - 36 bytes for: `{"type":"webauthn.get","challenge":"` + // - 43 bytes for base-64 encoding of 32 bytes of data + // - 2 bytes for: `",` + // - `clientDataFields.length` bytes for the additional client data JSON fields + // - 1 byte for: `}` + let encodedLength := add(82, clientDataFields.length) + + // Set `clientDataJson` return parameter to point to the start of the free memory. + // This is where the encoded JSON will be stored. + clientDataJson := mload(0x40) + + // Write the constant bytes of the encoded client data JSON string as per the JSON + // serialization specification. Note that we write the data backwards, this is to avoid + // overwriting previously written data with zeros. Offsets are computed to account for + // both the leading 32-byte length and leading zeros from the constants. + mstore(add(clientDataJson, encodedLength), 0x7d) // } + mstore(add(clientDataJson, 81), 0x222c) // ", + mstore(add(clientDataJson, 36), 0x2c226368616c6c656e6765223a22) // ,"challenge":" + mstore(add(clientDataJson, 22), 0x7b2274797065223a22776562617574686e2e67657422) // {"type":"webauthn.get" + mstore(clientDataJson, encodedLength) + + // Copy the client data fields from calldata to their reserved space in memory. + calldatacopy(add(clientDataJson, 113), clientDataFields.offset, clientDataFields.length) + + // Store the base-64 URL character lookup table into the scratch and free memory pointer + // space in memory [^1]. The table is split into two 32-byte parts and stored in memory + // from address 0x1f to 0x5e. Note that the offset is chosen in such a way that the + // least significant byte of `mload(x)` is the base-64 ASCII character for the 6-bit + // value `x`. We will write the free memory pointer at address `0x40` before leaving the + // assembly block accounting for the allocation of `clientDataJson`. + // + // - [^1](https://docs.soliditylang.org/en/stable/internals/layout_in_memory.html). + mstore(0x1f, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef") + mstore(0x3f, "ghijklmnopqrstuvwxyz0123456789-_") + + // Initialize a pointer for writing the base-64 encoded challenge. + let ptr := add(clientDataJson, 68) + + // Base-64 encode the challenge to its reserved space in memory. + // + // To minimize stack and jump operations, we partially unroll the loop. With full 6 + // iterations of the loop, we need to encode seven 6-bit groups and one 4-bit group. In + // total, it encodes 6 iterations * 7 groups * 6 bits = 252 bits. The remaining 4-bit + // group is encoded after the loop. `i` is initialized to 250, which is the number of + // bits by which we need to shift the data to get the first 6-bit group, and then we + // subtract 6 to get the next 6-bit group. + // + // We want to exit when all full 6 bits groups are encoded. After 6 iterations, `i` will + // be -2 and the **signed** comparison with 0 will break the loop. + for { + let i := 250 + } sgt(i, 0) { + // Advance the pointer by the number of bytes written (7 bytes in this case). + ptr := add(ptr, 7) + // Move `i` by 42 = 6 bits * 7 (groups processed in each iteration). + i := sub(i, 42) + } { + // Encode 6-bit groups into characters by looking them up in the character table. + // 0x3f is a mask to get the last 6 bits so that we can index directly to the + // base-64 lookup table. + mstore8(ptr, mload(and(shr(i, challenge), 0x3f))) + mstore8(add(ptr, 1), mload(and(shr(sub(i, 6), challenge), 0x3f))) + mstore8(add(ptr, 2), mload(and(shr(sub(i, 12), challenge), 0x3f))) + mstore8(add(ptr, 3), mload(and(shr(sub(i, 18), challenge), 0x3f))) + mstore8(add(ptr, 4), mload(and(shr(sub(i, 24), challenge), 0x3f))) + mstore8(add(ptr, 5), mload(and(shr(sub(i, 30), challenge), 0x3f))) + mstore8(add(ptr, 6), mload(and(shr(sub(i, 36), challenge), 0x3f))) + } + + // Encode the final 4-bit group, where 0x0f is a mask to get the last 4 bits. + mstore8(ptr, mload(shl(2, and(challenge, 0x0f)))) + + // Update the free memory pointer to point to the end of the encoded string. + // Store the length of the encoded string at the beginning of `result`. + mstore(0x40, and(add(clientDataJson, add(encodedLength, 0x3f)), not(0x1f))) + } + } + + /** + * @notice Encodes the message that is signed in a WebAuthn assertion. + * @dev The signing message is defined to be the concatenation of the authenticator data bytes + * with the 32-byte SHA-256 digest of the client data JSON. The hashing algorithm used on the + * signing message itself depends on the public key algorithm that was selected on WebAuthn + * credential creation. + * @param challenge The WebAuthn challenge used for the credential assertion. + * @param authenticatorData Authenticator data. + * @param clientDataFields Client data fields. + * @return message Signing message bytes. + */ + function encodeSigningMessage( + bytes32 challenge, + bytes calldata authenticatorData, + string calldata clientDataFields + ) internal view returns (bytes memory message) { + string memory clientDataJson = encodeClientDataJson(challenge, clientDataFields); + bytes32 clientDataHash = _sha256(bytes(clientDataJson)); + + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + // The length of the signing message, this is the length of the authenticator data plus + // the 32-byte hash of the client data JSON. + let messageLength := add(authenticatorData.length, 32) + + // Allocate the encoded signing `message` at the start of the free memory. Note that we + // pad the allocation to 32-byte boundary as Solidity typically does. + message := mload(0x40) + mstore(0x40, and(add(message, add(messageLength, 0x3f)), not(0x1f))) + mstore(message, messageLength) + + // The actual message data is written to 32 bytes past the start of the allocation, as + // the first 32 bytes contains the length of the byte array. + let messagePtr := add(message, 32) + + // Copy the authenticator from calldata to the start of the `message` buffer that was + // allocated. Note that we start copying 32 bytes after the start of the allocation to + // account for the length. + calldatacopy(messagePtr, authenticatorData.offset, authenticatorData.length) + + // Finally, write the client data JSON hash to the end of the `message`. + mstore(add(messagePtr, authenticatorData.length), clientDataHash) + } + } + + /** + * @notice Checks that the required authenticator data flags are set. + * @param authenticatorData The authenticator data. + * @param authenticatorFlags The authenticator flags to check for. + * @return success Whether the authenticator data flags are set. + */ + function checkAuthenticatorFlags( + bytes calldata authenticatorData, + AuthenticatorFlags authenticatorFlags + ) internal pure returns (bool success) { + success = authenticatorData[32] & AuthenticatorFlags.unwrap(authenticatorFlags) == AuthenticatorFlags.unwrap(authenticatorFlags); + } + + /** + * @notice Verifies a WebAuthn signature. + * @param challenge The WebAuthn challenge used in the credential assertion. + * @param signature The encoded WebAuthn signature bytes. + * @param authenticatorFlags The authenticator data flags that must be set. + * @param x The x-coordinate of the credential's public key. + * @param y The y-coordinate of the credential's public key. + * @param verifiers The P-256 verifier configuration to use. + * @return success Whether the signature is valid. + */ + function verifySignature( + bytes32 challenge, + bytes calldata signature, + AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) internal view returns (bool success) { + Signature calldata signatureStruct; + (success, signatureStruct) = castSignature(signature); + if (success) { + success = verifySignature(challenge, signatureStruct, authenticatorFlags, x, y, verifiers); + } + } + + /** + * @notice Verifies a WebAuthn signature. + * @param challenge The WebAuthn challenge used in the credential assertion. + * @param signature The WebAuthn signature data. + * @param authenticatorFlags The authenticator data flags that must be set. + * @param x The x-coordinate of the credential's public key. + * @param y The y-coordinate of the credential's public key. + * @param verifiers The P-256 verifier configuration to use. + * @return success Whether the signature is valid. + */ + function verifySignature( + bytes32 challenge, + Signature calldata signature, + AuthenticatorFlags authenticatorFlags, + uint256 x, + uint256 y, + P256.Verifiers verifiers + ) internal view returns (bool success) { + // The order of operations here is slightly counter-intuitive (in particular, you do not + // need to encode the signing message if the expected authenticator flags are missing). + // However, ordering things this way helps the Solidity compiler generate meaningfully more + // optimal code for the "happy path" when Yul optimizations are turned on. + bytes memory message = encodeSigningMessage(challenge, signature.authenticatorData, signature.clientDataFields); + if (checkAuthenticatorFlags(signature.authenticatorData, authenticatorFlags)) { + success = verifiers.verifySignatureAllowMalleability(_sha256(message), signature.r, signature.s, x, y); + } + } + + /** + * @notice Compute the SHA-256 hash of the input bytes. + * @dev The Solidity compiler sometimes generates a memory copy loop for the call to the SHA-256 + * precompile, even if the input is already in memory. Force this not to happen by manually + * implementing the call to the SHA-256 precompile. + * @param input The input bytes to hash. + * @return digest The SHA-256 digest of the input bytes. + */ + function _sha256(bytes memory input) public view returns (bytes32 digest) { + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + // The SHA-256 precompile is at address 0x0002. Note that we don't check the whether or + // not the precompile reverted or if the return data size is 32 bytes, which is a + // reasonable assumption for the precompile, as it is specified to always return the + // SHA-256 of its input bytes. + pop(staticcall(gas(), 0x0002, add(input, 0x20), mload(input), 0, 32)) + digest := mload(0) + } + } +} diff --git a/modules/passkey/certora/properties.txt b/modules/passkey/certora/properties.txt new file mode 100644 index 00000000..56b63c66 --- /dev/null +++ b/modules/passkey/certora/properties.txt @@ -0,0 +1,31 @@ +Factory - Immutability of Singleton Contract. [Critical] +Factory - getSigner is unique for every x,y and verifier combination (need to make sure it is required) [High] +Factory - createSigner and getSigner always returns the same address. [Medium] +Factory - Deterministic Address Calculation for Signers. [High] +Factory - Correctness of Signer Creation. (Cant called twice, override) [Cannot understand the risk] +Factory - Signature Validation (isValidSignatureForSigner Integrity) [Critical] +Factory - Code Presence Check (_hasNoCode Integrity) [Deprecated - internal code] +Proxy - Immutability of Configuration Parameters (x, y, Singleton, verifier) [Critical] +Proxy - Delegate Call Integrity (calls the _verifySignature implementation in the Singleton) [Low] +Proxy - Fallback data corruption (uses data appending that needed to be verified) [Low] +Proxy - verify return data from Delegate call. [Low] +Proxy - No buffer overflow when appending Parameters. //(Maybe for Dravee) [Low] +Singleton - Implementation of _verifySignature Function (Integrity) [High/Medium] +Singleton - getConfiguration Function (Integrity). [High/Medium] +Singleton - Both is valid Signature behave the same way. [Low] +Singleton - Once signer passed isValidSignature it will never fail on it after any call. [Low] +Singleton - Once isValidSignature failed, it will never pass before createSigner called. [High] +WebAuthn - castSignature Integrity [Low/Medium] +WebAuthn - encodeClientDataJson Integrity [Medium] +WebAuthn - encodeSigningMessage Integrity [Medium] +WebAuthn - verifySignature Integrity [Medium] +WebAuthn - Both verifySignature behave the same way. [Low] +WebAuthn - given input in encodeSigningMessage(), one should produce only one valid output. [Medium - Maybe duplication] + i.e., one cannot reuse a signature valid for one challenge to be valid for another challenge + +// Optional +Checks for Revert condition on critical Functions (isValidSignature, + verifySignature, Proxy Fallback, createSigner, getSigner) [Low] + + // Open Question for Dravee: + What is the user protection against hacks? \ No newline at end of file diff --git a/modules/passkey/certora/requirements.txt b/modules/passkey/certora/requirements.txt new file mode 100644 index 00000000..31db1d46 --- /dev/null +++ b/modules/passkey/certora/requirements.txt @@ -0,0 +1 @@ +certora-cli==7.17.2 diff --git a/modules/passkey/certora/specs/GetConfigurationSpec.spec b/modules/passkey/certora/specs/GetConfigurationSpec.spec new file mode 100644 index 00000000..bd68bbf7 --- /dev/null +++ b/modules/passkey/certora/specs/GetConfigurationSpec.spec @@ -0,0 +1,36 @@ +using GetConfigurationProxyHarness as proxy; + +methods { + function GetConfigurationProxyHarness.getX() external returns (uint256) envfree; + function GetConfigurationProxyHarness.getY() external returns (uint256) envfree; + function GetConfigurationProxyHarness.getVerifiers() external returns (P256.Verifiers) envfree; + + function _._ external => DISPATCH [ + SafeWebAuthnSignerSingleton.getConfiguration() + ] default HAVOC_ALL; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ getConfiguration Function (Integrity) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule verifyGetConfigurationIntegrity(env e){ + + uint256 x; + uint256 y; + P256.Verifiers verifiers; + uint256 new_x; uint256 new_y; P256.Verifiers new_verifiers; + bytes32 message; + + x = proxy.getX(); + y = proxy.getY(); + verifiers = proxy.getVerifiers(); + (new_x, new_y, new_verifiers) = proxy.getConfiguration(e); + + assert x == new_x; + assert y == new_y; + assert verifiers == new_verifiers; + satisfy true; +} diff --git a/modules/passkey/certora/specs/GetSigner.spec b/modules/passkey/certora/specs/GetSigner.spec new file mode 100644 index 00000000..4304f5d9 --- /dev/null +++ b/modules/passkey/certora/specs/GetSigner.spec @@ -0,0 +1,89 @@ +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ + getSigner is unique for every x,y and verifier combination, proved with assumptions: + 1.) value before cast to address <= max_uint160. + 2.) munging required to complete signer data to be constructed from full 32bytes size arrays + function getSignerHarnessed(uint256 x, uint256 y, P256.Verifiers verifiers) public view returns (uint256 value) { + bytes32 codeHash = keccak256( + abi.encodePacked( + type(SafeWebAuthnSignerProxy).creationCode, + "01234567891011121314152546", <--------------- HERE! + uint256(uint160(address(SINGLETON))), + x, + y, + uint256(P256.Verifiers.unwrap(verifiers)) + ) + ); + value = uint256(keccak256(abi.encodePacked(hex"ff", address(this), bytes32(0), codeHash))); + } +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +// helper rule to justify the use of the harnessed implementation (proved). +rule mungedEquivalence() +{ + env e1; + env e2; + + require e1.msg.value == 0 && e2.msg.value == 0; + uint256 x; + uint256 y; + P256.Verifiers verifier; + + storage s = lastStorage; + + uint256 harnessedSignerValue = getSignerHarnessed@withrevert(e1, x, y, verifier); + bool harnessedSignerRevert1 = lastReverted; + + address harnessedSigner = castToAddress@withrevert(e1, harnessedSignerValue); + bool harnessedSignerRevert2 = harnessedSignerRevert1 && lastReverted; + + address signer = getSigner@withrevert(e2, x, y, verifier) at s; + bool signerRevert = lastReverted; + + assert (harnessedSignerRevert2 == signerRevert); + assert (!harnessedSignerRevert2 && !signerRevert) => (harnessedSigner == signer); +} + +rule uniqueSigner(){ + env e; + + uint256 firstX; + uint256 firstY; + P256.Verifiers firstVerifier; + + uint256 firstSignerValue = getSignerHarnessed(e, firstX, firstY, firstVerifier); + require firstSignerValue <= max_uint160; // <=== needed assumption + + address firstSigner = castToAddress(e, firstSignerValue); + + uint256 secondX; + uint256 secondY; + P256.Verifiers secondVerifier; + + uint256 secondSignerValue = getSignerHarnessed(e, secondX, secondY, secondVerifier); + require secondSignerValue <= max_uint160; // <=== needed assumption + + address secondSigner = castToAddress(e, secondSignerValue); + + assert firstSigner == secondSigner <=> (firstX == secondX && firstY == secondY && firstVerifier == secondVerifier); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Deterministic address in get signer (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule deterministicSigner() +{ + env e1; + env e2; + + uint x; + uint y; + P256.Verifiers verifier; + + address signer = getSigner(e1, x, y, verifier); + + assert signer == getSigner(e2, x, y, verifier); +} \ No newline at end of file diff --git a/modules/passkey/certora/specs/ProxySimulator.spec b/modules/passkey/certora/specs/ProxySimulator.spec new file mode 100644 index 00000000..e04d33f1 --- /dev/null +++ b/modules/passkey/certora/specs/ProxySimulator.spec @@ -0,0 +1,54 @@ +using SafeWebAuthnSignerProxy as SafeWebAuthnSignerProxy; +using WebAuthnHarnessWithMunge as WebAuthnHarness; + +methods { + function P256.verifySignatureAllowMalleability(P256.Verifiers a, bytes32 b, uint256 c, uint256 d, uint256 e, uint256 f) internal returns (bool) => + verifySignatureAllowMalleabilityGhost(a, b, c, d, e, f); + + function WebAuthn.encodeSigningMessage(bytes32 challenge, bytes calldata authenticatorData, string calldata clientDataFields) internal returns (bytes memory) => + GETencodeSigningMessageCVL(challenge, authenticatorData, clientDataFields); + + function WebAuthnHarness.checkInjective(bytes32 challenge, bytes32 authenticatorData, bytes32 clientDataFields, bytes32 result) internal returns (bool) => + checkInjectiveSummary(challenge, authenticatorData, clientDataFields, result); + + function _._ external => DISPATCH [ + SafeWebAuthnSignerProxy._, + SafeWebAuthnSignerSingleton._ + ] default NONDET; +} + +function GETencodeSigningMessageCVL(bytes32 challenge, bytes authenticatorData, string clientDataFields) returns bytes +{ + env e; + return WebAuthnHarness.GETencodeSigningMessageSummary(e, challenge, authenticatorData, clientDataFields); +} + +ghost checkInjectiveSummary(bytes32, bytes32, bytes32, bytes32) returns bool { + axiom forall bytes32 x1. forall bytes32 y1. forall bytes32 z1. forall bytes32 x2. forall bytes32 y2. forall bytes32 z2. forall bytes32 result. + checkInjectiveSummary(x1, y1, z1, result) && checkInjectiveSummary(x2, y2, z2, result) => x1 == x2; +} + +ghost verifySignatureAllowMalleabilityGhost(P256.Verifiers, bytes32, uint256, uint256, uint256, uint256) returns bool { + axiom forall P256.Verifiers a. forall bytes32 message1. forall bytes32 message2. forall uint256 c. forall uint256 d. forall uint256 e. forall uint256 f. + verifySignatureAllowMalleabilityGhost(a, message1, c, d, e, f) && + verifySignatureAllowMalleabilityGhost(a, message2, c, d, e, f) => message1 == message2; +} + +// This is the same MAGIC_VALUE constant used in ERC1271. +definition MAGIC_VALUE() returns bytes4 = to_bytes4(0x1626ba7e); + +/* +Property 14. Proxy - verify return data from the fallback is only one of the magicNumbers +Uses another contract that simulates interaction with the proxy. The reason is that the prover doesn't check all +possible calldata values so this simulation will make the prover choose different values that will be passed on the calldata. +Rule stuck. +*/ +rule proxyReturnValue { + env e; + bytes32 message; + bytes signature; + + bytes4 ret = authenticate(e, message, signature); + + satisfy ret == MAGIC_VALUE() || ret == to_bytes4(0); +} diff --git a/modules/passkey/certora/specs/SafeWebAuthnSignerFactory.spec b/modules/passkey/certora/specs/SafeWebAuthnSignerFactory.spec new file mode 100644 index 00000000..8522d88e --- /dev/null +++ b/modules/passkey/certora/specs/SafeWebAuthnSignerFactory.spec @@ -0,0 +1,248 @@ +using SafeWebAuthnSignerProxy as proxy; +using SafeWebAuthnSignerSingleton as singleton; +using WebAuthnHarnessWithMunge as WebAuthnHarness; + + +methods{ + function getSigner(uint256 x, uint256 y, P256.Verifiers v) internal returns (address) => getSignerGhost(x, y, v); + function createSigner(uint256, uint256, P256.Verifiers) external returns (address); + function hasNoCode(address) external returns (bool) envfree; + + function P256.verifySignatureAllowMalleability(P256.Verifiers a, bytes32 b, uint256 c, uint256 d, uint256 e, uint256 f) internal returns (bool) => + verifySignatureAllowMalleabilityGhost(a, b, c, d, e, f); + + function WebAuthn.encodeSigningMessage(bytes32 challenge, bytes calldata authenticatorData, string calldata clientDataFields) internal returns (bytes memory) => + GETencodeSigningMessageCVL(challenge, authenticatorData, clientDataFields); + + function WebAuthnHarness.checkInjective(bytes32 challenge, bytes32 authenticatorData, bytes32 clientDataFields, bytes32 result) internal returns (bool) => + checkInjectiveSummary(challenge, authenticatorData, clientDataFields, result); + function _.isValidSignature(bytes32,bytes) external => DISPATCHER(optimistic=true, use_fallback=true); + + function _._ external => DISPATCH [ + proxy._, + singleton._ + ] default NONDET; +} + +ghost mapping(bytes32 => mapping(bytes32 => mapping(bytes32 => bytes32))) componentToEncodeHash; +ghost mapping(bytes32 => bytes32) revChallenge; +ghost mapping(bytes32 => bytes32) revAuthenticator; +ghost mapping(bytes32 => bytes32) revClientData; + +function GETencodeSigningMessageCVL(bytes32 challenge, bytes authenticatorData, string clientDataFields) returns bytes { + bytes32 authHash = keccak256(authenticatorData); + bytes32 clientHash = keccak256(clientDataFields); + bytes32 toRetHash = componentToEncodeHash[challenge][authHash][clientHash]; + require(revChallenge[toRetHash] == challenge); + require(revAuthenticator[toRetHash] == authHash); + require(revClientData[toRetHash] == clientHash); + bytes toRet; + require keccak256(toRet) == toRetHash; + return toRet; +} + +ghost checkInjectiveSummary(bytes32, bytes32, bytes32, bytes32) returns bool { + axiom forall bytes32 x1. forall bytes32 y1. forall bytes32 z1. forall bytes32 x2. forall bytes32 y2. forall bytes32 z2. forall bytes32 result. + checkInjectiveSummary(x1, y1, z1, result) && checkInjectiveSummary(x2, y2, z2, result) => x1 == x2; +} + +ghost verifySignatureAllowMalleabilityGhost(P256.Verifiers, bytes32, uint256, uint256, uint256, uint256) returns bool { + axiom forall P256.Verifiers a. forall bytes32 message1. forall bytes32 message2. forall uint256 c. forall uint256 d. forall uint256 e. forall uint256 f. + verifySignatureAllowMalleabilityGhost(a, message1, c, d, e, f) && + verifySignatureAllowMalleabilityGhost(a, message2, c, d, e, f) => message1 == message2; +} + +// Summary is correct only if the unique signer rule is proved spec GetSigner +ghost getSignerGhost(uint256, uint256, P256.Verifiers) returns address { + axiom forall uint256 x1. forall uint256 y1. forall P256.Verifiers v1. + forall uint256 x2. forall uint256 y2. forall P256.Verifiers v2. + (getSignerGhost(x1, y1, v1) == getSignerGhost(x2, y2, v2)) <=> (x1 == x2 && y1 == y2 && v1 == v2); +} + +definition MAGIC_VALUE() returns bytes4 = to_bytes4(0x1626ba7e); + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Singleton implementation never change (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule singletonNeverChanges() +{ + env e; + method f; + calldataarg args; + address currentSingleton = currentContract.SINGLETON; + + f(e, args); + + assert currentSingleton == currentContract.SINGLETON; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ createSigner and getSigner always returns the same address (Proved under assumption) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule createAndGetSignerEquivalence(){ + env e; + + uint256 createX; + uint256 createY; + P256.Verifiers createVerifier; + + address signer1 = createSigner(e, createX, createY, createVerifier); + + uint256 getX; + uint256 getY; + P256.Verifiers getVerifier; + + address signer2 = getSigner(e, getX, getY, getVerifier); + + assert signer1 == signer2 <=> (createX == getX && createY == getY && createVerifier == getVerifier); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Correctness of Signer Creation. (Cant called twice and override) (Bug CERT-6252) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +ghost mathint numOfCreation; +ghost mapping(address => uint) address_map; +ghost address signerAddress; + +hook CREATE2(uint value, uint offset, uint length, bytes32 salt) address v{ + require(v == signerAddress); + numOfCreation = numOfCreation + 1; +} + +rule SignerCreationCantOverride() +{ + env e; + require numOfCreation == 0; + + uint x; + uint y; + P256.Verifiers verifier; + + address a = getSigner(e, x, y, verifier); + require address_map[a] == 0; + + createSigner(e, x, y, verifier); + createSigner@withrevert(e, x, y, verifier); + + assert numOfCreation < 2; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Has no code integrity (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule hasNoCodeIntegrity() +{ + address a; + assert (a == proxy) => !hasNoCode(a); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner equiv to first deploying the signer with the factory, and then | +| verifying the signature with it directly (CERT-6221) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule createAndVerifyEQtoIsValidSignatureForSigner() +{ + env e; + uint x; + uint y; + P256.Verifiers verifier; + bytes signature; + bytes32 message; + + signerAddress = getSigner(e, x, y, verifier); + require(numOfCreation == 0); + require(hasNoCode(e, signerAddress)); + require(WebAuthnHarness.castSignatureSuccess(e, message, signature)); + + + storage s = lastStorage; + + bytes4 magic1 = isValidSignatureForSigner(e, message, signature, x, y, verifier); + + bytes4 magic2 = createAndVerify(e, message, signature, x, y, verifier) at s; + + assert magic1 == magic2 && numOfCreation == 1; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner Consistency (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule isValidSignatureForSignerConsistency(method f) filtered { + f -> f.selector != sig:WebAuthnHarness.encodeClientDataJson(bytes32,string).selector +} { + env e; + env e1; + env e2; + require e1.msg.value == 0 && e2.msg.value == 0; + + calldataarg args; + + uint x; + uint y; + P256.Verifiers verifier; + + bytes signature; + bytes32 message; + + bytes4 magic1 = isValidSignatureForSigner@withrevert(e1, message, signature, x, y, verifier); + bool firstRevert = lastReverted; + + f(e, args); + + bytes4 magic2 = isValidSignatureForSigner@withrevert(e2, message, signature, x, y, verifier); + bool secondRevert = lastReverted; + + assert firstRevert == secondRevert; + assert (!firstRevert && !secondRevert) => (magic1 == MAGIC_VALUE()) <=> (magic2 == MAGIC_VALUE()); +} + + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner Integrity (Violated) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule isValidSignatureForSignerIntegrity() +{ + env e; + + uint x; + uint y; + P256.Verifiers verifier; + bytes signature; + bytes32 message; + + bytes4 magic1 = isValidSignatureForSigner(e, message, signature, x, y, verifier); + + satisfy magic1 == MAGIC_VALUE(); +} + + +rule getSignerRevertingConditions { + env e; + uint256 x; + uint256 y; + P256.Verifiers verifiers; + + bool triedTransferringEth = e.msg.value != 0; + + getSigner@withrevert(e, x, y, verifiers); + + assert lastReverted <=> triedTransferringEth; +} diff --git a/modules/passkey/certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec b/modules/passkey/certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec new file mode 100644 index 00000000..8522d88e --- /dev/null +++ b/modules/passkey/certora/specs/SafeWebAuthnSignerFactoryWithMunge.spec @@ -0,0 +1,248 @@ +using SafeWebAuthnSignerProxy as proxy; +using SafeWebAuthnSignerSingleton as singleton; +using WebAuthnHarnessWithMunge as WebAuthnHarness; + + +methods{ + function getSigner(uint256 x, uint256 y, P256.Verifiers v) internal returns (address) => getSignerGhost(x, y, v); + function createSigner(uint256, uint256, P256.Verifiers) external returns (address); + function hasNoCode(address) external returns (bool) envfree; + + function P256.verifySignatureAllowMalleability(P256.Verifiers a, bytes32 b, uint256 c, uint256 d, uint256 e, uint256 f) internal returns (bool) => + verifySignatureAllowMalleabilityGhost(a, b, c, d, e, f); + + function WebAuthn.encodeSigningMessage(bytes32 challenge, bytes calldata authenticatorData, string calldata clientDataFields) internal returns (bytes memory) => + GETencodeSigningMessageCVL(challenge, authenticatorData, clientDataFields); + + function WebAuthnHarness.checkInjective(bytes32 challenge, bytes32 authenticatorData, bytes32 clientDataFields, bytes32 result) internal returns (bool) => + checkInjectiveSummary(challenge, authenticatorData, clientDataFields, result); + function _.isValidSignature(bytes32,bytes) external => DISPATCHER(optimistic=true, use_fallback=true); + + function _._ external => DISPATCH [ + proxy._, + singleton._ + ] default NONDET; +} + +ghost mapping(bytes32 => mapping(bytes32 => mapping(bytes32 => bytes32))) componentToEncodeHash; +ghost mapping(bytes32 => bytes32) revChallenge; +ghost mapping(bytes32 => bytes32) revAuthenticator; +ghost mapping(bytes32 => bytes32) revClientData; + +function GETencodeSigningMessageCVL(bytes32 challenge, bytes authenticatorData, string clientDataFields) returns bytes { + bytes32 authHash = keccak256(authenticatorData); + bytes32 clientHash = keccak256(clientDataFields); + bytes32 toRetHash = componentToEncodeHash[challenge][authHash][clientHash]; + require(revChallenge[toRetHash] == challenge); + require(revAuthenticator[toRetHash] == authHash); + require(revClientData[toRetHash] == clientHash); + bytes toRet; + require keccak256(toRet) == toRetHash; + return toRet; +} + +ghost checkInjectiveSummary(bytes32, bytes32, bytes32, bytes32) returns bool { + axiom forall bytes32 x1. forall bytes32 y1. forall bytes32 z1. forall bytes32 x2. forall bytes32 y2. forall bytes32 z2. forall bytes32 result. + checkInjectiveSummary(x1, y1, z1, result) && checkInjectiveSummary(x2, y2, z2, result) => x1 == x2; +} + +ghost verifySignatureAllowMalleabilityGhost(P256.Verifiers, bytes32, uint256, uint256, uint256, uint256) returns bool { + axiom forall P256.Verifiers a. forall bytes32 message1. forall bytes32 message2. forall uint256 c. forall uint256 d. forall uint256 e. forall uint256 f. + verifySignatureAllowMalleabilityGhost(a, message1, c, d, e, f) && + verifySignatureAllowMalleabilityGhost(a, message2, c, d, e, f) => message1 == message2; +} + +// Summary is correct only if the unique signer rule is proved spec GetSigner +ghost getSignerGhost(uint256, uint256, P256.Verifiers) returns address { + axiom forall uint256 x1. forall uint256 y1. forall P256.Verifiers v1. + forall uint256 x2. forall uint256 y2. forall P256.Verifiers v2. + (getSignerGhost(x1, y1, v1) == getSignerGhost(x2, y2, v2)) <=> (x1 == x2 && y1 == y2 && v1 == v2); +} + +definition MAGIC_VALUE() returns bytes4 = to_bytes4(0x1626ba7e); + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Singleton implementation never change (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule singletonNeverChanges() +{ + env e; + method f; + calldataarg args; + address currentSingleton = currentContract.SINGLETON; + + f(e, args); + + assert currentSingleton == currentContract.SINGLETON; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ createSigner and getSigner always returns the same address (Proved under assumption) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule createAndGetSignerEquivalence(){ + env e; + + uint256 createX; + uint256 createY; + P256.Verifiers createVerifier; + + address signer1 = createSigner(e, createX, createY, createVerifier); + + uint256 getX; + uint256 getY; + P256.Verifiers getVerifier; + + address signer2 = getSigner(e, getX, getY, getVerifier); + + assert signer1 == signer2 <=> (createX == getX && createY == getY && createVerifier == getVerifier); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Correctness of Signer Creation. (Cant called twice and override) (Bug CERT-6252) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +ghost mathint numOfCreation; +ghost mapping(address => uint) address_map; +ghost address signerAddress; + +hook CREATE2(uint value, uint offset, uint length, bytes32 salt) address v{ + require(v == signerAddress); + numOfCreation = numOfCreation + 1; +} + +rule SignerCreationCantOverride() +{ + env e; + require numOfCreation == 0; + + uint x; + uint y; + P256.Verifiers verifier; + + address a = getSigner(e, x, y, verifier); + require address_map[a] == 0; + + createSigner(e, x, y, verifier); + createSigner@withrevert(e, x, y, verifier); + + assert numOfCreation < 2; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Has no code integrity (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule hasNoCodeIntegrity() +{ + address a; + assert (a == proxy) => !hasNoCode(a); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner equiv to first deploying the signer with the factory, and then | +| verifying the signature with it directly (CERT-6221) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule createAndVerifyEQtoIsValidSignatureForSigner() +{ + env e; + uint x; + uint y; + P256.Verifiers verifier; + bytes signature; + bytes32 message; + + signerAddress = getSigner(e, x, y, verifier); + require(numOfCreation == 0); + require(hasNoCode(e, signerAddress)); + require(WebAuthnHarness.castSignatureSuccess(e, message, signature)); + + + storage s = lastStorage; + + bytes4 magic1 = isValidSignatureForSigner(e, message, signature, x, y, verifier); + + bytes4 magic2 = createAndVerify(e, message, signature, x, y, verifier) at s; + + assert magic1 == magic2 && numOfCreation == 1; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner Consistency (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule isValidSignatureForSignerConsistency(method f) filtered { + f -> f.selector != sig:WebAuthnHarness.encodeClientDataJson(bytes32,string).selector +} { + env e; + env e1; + env e2; + require e1.msg.value == 0 && e2.msg.value == 0; + + calldataarg args; + + uint x; + uint y; + P256.Verifiers verifier; + + bytes signature; + bytes32 message; + + bytes4 magic1 = isValidSignatureForSigner@withrevert(e1, message, signature, x, y, verifier); + bool firstRevert = lastReverted; + + f(e, args); + + bytes4 magic2 = isValidSignatureForSigner@withrevert(e2, message, signature, x, y, verifier); + bool secondRevert = lastReverted; + + assert firstRevert == secondRevert; + assert (!firstRevert && !secondRevert) => (magic1 == MAGIC_VALUE()) <=> (magic2 == MAGIC_VALUE()); +} + + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ isValidSignatureForSigner Integrity (Violated) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule isValidSignatureForSignerIntegrity() +{ + env e; + + uint x; + uint y; + P256.Verifiers verifier; + bytes signature; + bytes32 message; + + bytes4 magic1 = isValidSignatureForSigner(e, message, signature, x, y, verifier); + + satisfy magic1 == MAGIC_VALUE(); +} + + +rule getSignerRevertingConditions { + env e; + uint256 x; + uint256 y; + P256.Verifiers verifiers; + + bool triedTransferringEth = e.msg.value != 0; + + getSigner@withrevert(e, x, y, verifiers); + + assert lastReverted <=> triedTransferringEth; +} diff --git a/modules/passkey/certora/specs/SafeWebAuthnSignerProxy.spec b/modules/passkey/certora/specs/SafeWebAuthnSignerProxy.spec new file mode 100644 index 00000000..65532fa5 --- /dev/null +++ b/modules/passkey/certora/specs/SafeWebAuthnSignerProxy.spec @@ -0,0 +1,67 @@ +using SafeWebAuthnSignerSingleton as SafeWebAuthnSignerSingleton; + +persistent ghost uint delegateSuccess; + +hook DELEGATECALL(uint g, address addr, uint argsOffset, uint argsLength, uint retOffset, uint retLength) uint rc { + // DELEGATECALL is used in this contract, but it only ever calls into the singleton. + assert (executingContract != currentContract || addr == SafeWebAuthnSignerSingleton, + "we should only `delegatecall` into the singleton." + ); + delegateSuccess = rc; +} + +/* +Property 11. Proxy - Immutability of Configuration Parameters (x, y, Singleton, verifier) +x, y, singleton and verifiers never changes after any function call. +Rule verified. +*/ +rule configParametersImmutability { + env e; + method f; + calldataarg args; + + address singletonBefore = currentContract._SINGLETON; + uint256 xBefore = currentContract._X; + uint256 yBefore = currentContract._Y; + P256.Verifiers verifiersBefore = currentContract._VERIFIERS; + + f(e, args); + + address singletonAfter = currentContract._SINGLETON; + uint256 xAfter = currentContract._X; + uint256 yAfter = currentContract._Y; + P256.Verifiers verifiersAfter = currentContract._VERIFIERS; + + assert singletonBefore == singletonAfter && + xBefore == xAfter && + yBefore == yAfter && + verifiersBefore == verifiersAfter; +} + +/* +Property 12. Proxy - Delegate Call Integrity (calls the Singleton) +Hooking on delegate calls will make sure we'll get a violation if the singleton isn't the contract called. +Rule verified. +*/ +rule delegateCallsOnlyToSingleton { + env e; + method f; + calldataarg args; + + f(e, args); + + assert true; +} + +/* +Property 13. Proxy - Fallback reverting conditions. +Fallback reverts iff the delegatecall didn't succeed. Data manipulation does not revert. +Rule verified. +*/ +rule fallbackRevertingConditions(method f, calldataarg args) filtered { f -> f.isFallback } { + env e; + + f@withrevert(e, args); + + assert lastReverted <=> delegateSuccess == 0; +} diff --git a/modules/passkey/certora/specs/SafeWebAuthnSignerSingleton.spec b/modules/passkey/certora/specs/SafeWebAuthnSignerSingleton.spec new file mode 100644 index 00000000..faa8e2e0 --- /dev/null +++ b/modules/passkey/certora/specs/SafeWebAuthnSignerSingleton.spec @@ -0,0 +1,154 @@ +using WebAuthnHarnessWithMunge as WebAuthnHarness; + +methods { + function P256.verifySignatureAllowMalleability(P256.Verifiers a, bytes32 b, uint256 c, uint256 d, uint256 e, uint256 f) internal returns (bool) => + verifySignatureAllowMalleabilityGhost(a, b, c, d, e, f); + + function WebAuthn.encodeSigningMessage(bytes32 challenge, bytes calldata authenticatorData, string calldata clientDataFields) internal returns (bytes memory) => + GETencodeSigningMessageCVL(challenge, authenticatorData, clientDataFields); + + function WebAuthnHarness.checkInjective(bytes32 challenge, bytes32 authenticatorData, bytes32 clientDataFields, bytes32 result) internal returns (bool) => + checkInjectiveSummary(challenge, authenticatorData, clientDataFields, result); + function SafeWebAuthnSignerFactory.getSigner(uint256 x, uint256 y, P256.Verifiers v) internal returns (address) => getSignerGhost(x, y, v); +} + +ghost mapping(bytes32 => mapping(bytes32 => mapping(bytes32 => bytes32))) componentToEncodeHash; +ghost mapping(bytes32 => bytes32) revChallenge; +ghost mapping(bytes32 => bytes32) revAuthenticator; +ghost mapping(bytes32 => bytes32) revClientData; + +function GETencodeSigningMessageCVL(bytes32 challenge, bytes authenticatorData, string clientDataFields) returns bytes { + bytes32 authHash = keccak256(authenticatorData); + bytes32 clientHash = keccak256(clientDataFields); + bytes32 toRetHash = componentToEncodeHash[challenge][authHash][clientHash]; + require(revChallenge[toRetHash] == challenge); + require(revAuthenticator[toRetHash] == authHash); + require(revClientData[toRetHash] == clientHash); + bytes toRet; + require keccak256(toRet) == toRetHash; + return toRet; +} + +ghost checkInjectiveSummary(bytes32, bytes32, bytes32, bytes32) returns bool { + axiom forall bytes32 x1. forall bytes32 y1. forall bytes32 z1. forall bytes32 x2. forall bytes32 y2. forall bytes32 z2. forall bytes32 result. + checkInjectiveSummary(x1, y1, z1, result) && checkInjectiveSummary(x2, y2, z2, result) => x1 == x2; +} + +ghost verifySignatureAllowMalleabilityGhost(P256.Verifiers, bytes32, uint256, uint256, uint256, uint256) returns bool { + axiom forall P256.Verifiers a. forall bytes32 message1. forall bytes32 message2. forall uint256 c. forall uint256 d. forall uint256 e. forall uint256 f. + verifySignatureAllowMalleabilityGhost(a, message1, c, d, e, f) && + verifySignatureAllowMalleabilityGhost(a, message2, c, d, e, f) => message1 == message2; +} + +// Summary is correct only if the unique signer rule is proved spec GetSigner +ghost getSignerGhost(uint256, uint256, P256.Verifiers) returns address { + axiom forall uint256 x1. forall uint256 y1. forall P256.Verifiers v1. + forall uint256 x2. forall uint256 y2. forall P256.Verifiers v2. + (getSignerGhost(x1, y1, v1) == getSignerGhost(x2, y2, v2)) <=> (x1 == x2 && y1 == y2 && v1 == v2); +} + +definition MAGIC_VALUE() returns bytes4 = to_bytes4(0x1626ba7e); + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Implementation of isValidSignature Function (Integrity) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule verifySignatureUniqueness(env e){ + bytes32 first_message; + bytes32 second_message; + WebAuthn.Signature sigStruct; + bytes signature = WebAuthnHarness.encodeSignature(e, sigStruct); + + bytes4 first_message_verified = isValidSignature(e, first_message, signature); + bytes4 second_message_verified = isValidSignature(e, second_message, signature); + + assert (first_message != second_message) => !(first_message_verified == MAGIC_VALUE() && second_message_verified == MAGIC_VALUE()); + satisfy true; +} + +rule verifySignatureIntegrity(env e){ + bytes32 first_message; + bytes32 second_message; + WebAuthn.Signature sigStruct; + bytes signature = WebAuthnHarness.encodeSignature(e, sigStruct); + + bytes4 first_message_verified = isValidSignature(e, first_message, signature); + require (first_message_verified == MAGIC_VALUE()); + + bytes4 second_message_verified = isValidSignature(e, second_message, signature); + + assert (second_message_verified == MAGIC_VALUE()) <=> (first_message == second_message); + satisfy true; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Both isValidSignature behave the same way │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule verifyIsValidSignatureAreEqual(env e){ + bytes data; + bytes first_signature; + WebAuthn.Signature sigStruct; + first_signature = WebAuthnHarness.encodeSignature(e, sigStruct); + + bytes4 magicValue_hashed = isValidSignature(e, data, first_signature); + + bytes32 message; + bytes4 magicValue_message = isValidSignature(e, message, first_signature); + + assert (magicValue_hashed == to_bytes4(0x20c13b0b) && magicValue_message == to_bytes4(0x1626ba7e)) => message == keccak256(data); + assert message == keccak256(data) => (magicValue_hashed == to_bytes4(0x20c13b0b) && magicValue_message == to_bytes4(0x1626ba7e)) || + (magicValue_hashed == to_bytes4(0) && magicValue_message == to_bytes4(0)); + satisfy (magicValue_hashed == to_bytes4(0x20c13b0b) && magicValue_message == to_bytes4(0x1626ba7e)); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Once signer passed isValidSignature it will never fail on it after any call │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule verifyIsValidSignatureWillContinueToSucceed(method f) filtered { + f -> f.selector != sig:WebAuthnHarness.encodeClientDataJson(bytes32,string).selector +} { + env e; + require e.msg.value == 0; + + calldataarg args; + + bytes32 message; + bytes signature; + + bytes4 firstVerified = isValidSignature@withrevert(e, message, signature); + bool firstReverted = lastReverted; + + f(e, args); + + bytes4 secondVerify = isValidSignature@withrevert(e, message, signature); + bool secondRevert = lastReverted; + + assert firstReverted == secondRevert; + assert (!firstReverted && !secondRevert) => (firstVerified == secondVerify); + + satisfy (!firstReverted && firstVerified == to_bytes4(0x1626ba7e)); + satisfy true; +} + +rule isValidSignatureRevertingConditions { + env e; + bytes32 message; + + WebAuthn.Signature sigStruct; + bytes signature = WebAuthnHarness.encodeSignature(e, sigStruct); + + bool triedTransferringEth = e.msg.value != 0; + bool dataLengthInsufficient = sigStruct.authenticatorData.length <= 32; + + isValidSignature@withrevert(e, message, signature); + + assert lastReverted <=> (triedTransferringEth || dataLengthInsufficient); +} diff --git a/modules/passkey/certora/specs/WebAuthn.spec b/modules/passkey/certora/specs/WebAuthn.spec new file mode 100644 index 00000000..ca1f5f5a --- /dev/null +++ b/modules/passkey/certora/specs/WebAuthn.spec @@ -0,0 +1,316 @@ + +methods { + function WebAuthn.encodeClientDataJson(bytes32 challenge, string calldata clientDataFields) internal returns (string memory) => + SencodeDataJsonCVL(challenge, clientDataFields); + + function checkInjective(bytes32 challenge, bytes32 clientDataFields, bytes32 result) internal returns (bool) => + checkInjectiveSummary(challenge, clientDataFields, result); + + function P256.verifySignatureAllowMalleability(P256.Verifiers a, bytes32 b, uint256 c, uint256 d, uint256 e, uint256 f) internal returns bool => + verifySignatureAllowMalleabilityGhost(a, b, c, d, e, f); +} + +function SencodeDataJsonCVL(bytes32 challenge, string clientDataFields) returns string +{ + env e; + return summaryEncodeDataJson(e, challenge, clientDataFields); +} + +ghost checkInjectiveSummary(bytes32, bytes32, bytes32) returns bool { + axiom forall bytes32 x1. forall bytes32 y1. forall bytes32 x2. forall bytes32 y2. forall bytes32 result. + (checkInjectiveSummary(x1, y1, result) && checkInjectiveSummary(x2, y2, result)) => (x1 == x2); +} + +ghost verifySignatureAllowMalleabilityGhost(P256.Verifiers, bytes32, uint256, uint256, uint256, uint256) returns bool { + axiom forall P256.Verifiers a. forall bytes32 message1. forall bytes32 message2. forall uint256 c. forall uint256 d. forall uint256 e. forall uint256 f. + verifySignatureAllowMalleabilityGhost(a, message1, c, d, e, f) && + verifySignatureAllowMalleabilityGhost(a, message2, c, d, e, f) => message1 == message2; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ shaIntegrity 2 different inputs results in 2 different hashes (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule shaIntegrity(){ + env e; + + bytes input1; + bytes input2; + + bytes32 input1_sha = getSha256(e, input1); + bytes32 input2_sha = getSha256(e, input2); + + assert (keccak256(input1) != keccak256(input2)) <=> input1_sha != input2_sha; +} + + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ every 2 challenges results in unique message when using encodeSigningMessage (Timeout cert-6290) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule uniqueMessagePerChallenge(){ + env e; + + bytes32 challenge1; + bytes32 challenge2; + bytes authenticatorData; + require authenticatorData.length % 32 == 0; + string clientDataField; + + bytes message1 = encodeSigningMessage(e, challenge1, authenticatorData, clientDataField); + bytes message2 = encodeSigningMessage(e, challenge2, authenticatorData, clientDataField); + + assert (challenge1 != challenge2) <=> (getSha256(e, message1) != getSha256(e, message2)); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ verifySignature functions are equivalent (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule verifySignatureEq(){ + env e; + + // verify signature related args + bytes32 challenge; + WebAuthn.AuthenticatorFlags authenticatorFlags; + uint256 x; + uint256 y; + P256.Verifiers verifiers; + + // signature related args + bytes authenticatorData; + string clientDataFields; + uint256 r; + uint256 s; + bytes bytesSignature; + WebAuthn.Signature structSignature; + + bytesSignature, structSignature = prepareSignature(e, authenticatorData, clientDataFields, r, s); + + storage firstStorage = lastStorage; + + bool result1 = verifySignature@withrevert(e, challenge, bytesSignature, authenticatorFlags, x, y, verifiers); + bool firstCallRevert = lastReverted; + + bool result2 = verifySignature@withrevert(e, challenge, structSignature, authenticatorFlags, x, y, verifiers) at firstStorage; + bool secondCallRevert = lastReverted; + + assert firstCallRevert == secondCallRevert; + assert (!firstCallRevert && !secondCallRevert) => result1 == result2; +} + + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ verifySignature consistent (Proved) │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule verifySignatureConsistent(){ + env e; + env e1; + env e2; + require e1.msg.value == 0 && e2.msg.value == 0; + calldataarg args; + + bytes32 challenge; + WebAuthn.AuthenticatorFlags authenticatorFlags; + uint256 x; + uint256 y; + P256.Verifiers verifiers; + bytes bytesSignature; + + + bool result1 = verifySignature@withrevert(e1, challenge, bytesSignature, authenticatorFlags, x, y, verifiers); + bool firstCallRevert = lastReverted; + + + bool result2 = verifySignature@withrevert(e2, challenge, bytesSignature, authenticatorFlags, x, y, verifiers); + bool secondCallRevert = lastReverted; + + assert firstCallRevert == secondCallRevert; + assert (!firstCallRevert && !secondCallRevert) => result1 == result2; +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CastSignature Consistent (Once valid always valid, Once failed always failed, includes revert cases and middle call)| +│ (Proved) | +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule castSignatureConsistent(){ + env e; + env e1; + env e2; + + require (e1.msg.value == e2.msg.value) && (e1.msg.value == e.msg.value) && (e.msg.value == 0); + + calldataarg args; + + bytes signature; + + bool firstIsValid; + WebAuthn.Signature firstData; + + bool secondIsValid; + WebAuthn.Signature secondData; + + firstIsValid, firstData = castSignature@withrevert(e1, signature); + bool firstRevert = lastReverted; + + + secondIsValid, secondData = castSignature@withrevert(e2, signature); + bool secondRevert = lastReverted; + + if (!firstRevert && !secondRevert) { + assert compareSignatures(e, firstData, secondData) && firstIsValid == secondIsValid; + } + + assert (firstRevert == secondRevert); +} + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CastSignature Canonical Deterministic Decoding (Proved) | +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ + +rule castSignatureDeterministicDecoding(){ + env e; + + WebAuthn.Signature structSignature; + bytes encodeSig = encodeSignature(e, structSignature); + + WebAuthn.Signature decodedSignature; + bool isValid; + + isValid, decodedSignature = castSignature(e, encodeSig); + + assert isValid <=> compareSignatures(e, structSignature, decodedSignature); +} + + +/* +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ CastSignature Length Check Validity (Proved) | +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +/* note: the rule requires specific features still not available on a stable certora-cli +rule castSignatureLengthCheckValidity(){ + env e; + + WebAuthn.Signature structSignature; + bytes encodeSig; + + WebAuthn.Signature decodedSignature; + bool isValid; + + isValid, decodedSignature = castSignature(e, encodeSig); + bool length_is_correct = encodeSig.length <= encodeSignature(e, decodedSignature).length; + + assert isValid <=> length_is_correct; +} +*/ +/* +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ castSignature Reverting Conditions | +| Will only revert if function was paid. | +| Passes - https://prover.certora.com/output/15800/9d6be0f24e094ffe94b9faf1ed8bfc8f?anonymousKey=517b64e4e1693de5294f836400a5581fc7ec0bcf | +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule castSignatureRevertingConditions { + env e; + bytes signature; + + bool triedTransferringEth = e.msg.value != 0; + + castSignature_notreturns@withrevert(e, signature); + + assert lastReverted <=> triedTransferringEth; +} + +/* +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ encodeClientDataJson Reverting Conditions | +| Will only revert if function was paid. | +| Passes - https://prover.certora.com/output/15800/ccc8d2fd45b04cf5ac8efdf263820324?anonymousKey=68d9ae2e6f4f22dd7aae9f8bddbc5faf7de12df1 | +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule encodeClientDataJsonRevertingConditions { + env e; + bytes32 challenge; + string clientDataFields; + + bool triedTransferringEth = e.msg.value != 0; + + encodeClientDataJson@withrevert(e, challenge, clientDataFields); + + assert lastReverted <=> triedTransferringEth; +} + +/* +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ encodeSigningMessage Reverting Conditions | +| Will only revert if function was paid. | +| Passes - https://prover.certora.com/output/15800/93685eaf7e7146eabaa38125dc32f29b?anonymousKey=eaf6d4135849f0476d8e9e6a758cca8818a96b94 | +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule encodeSigningMessageRevertingConditions { + env e; + bytes32 challenge; + bytes authenticatorData; + string clientDataFields; + + bool triedTransferringEth = e.msg.value != 0; + + encodeSigningMessage@withrevert(e, challenge, authenticatorData, clientDataFields); + + assert lastReverted <=> triedTransferringEth; +} + +/* +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ checkAuthenticatorFlags Reverting Conditions | +| Will only revert if function was paid or the bytes array `authenticatorData`'s length is too small (<= 32 bytes). | +| Passes - https://prover.certora.com/output/15800/d2d34792998c479db5f38430efc7dc8b?anonymousKey=7e68511768f3da35bdb9f75c9f86d40d2e07e2aa | +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule checkAuthenticatorFlagsRevertingConditions { + env e; + bytes authenticatorData; + WebAuthn.AuthenticatorFlags authenticatorFlags; + + bool triedTransferringEth = e.msg.value != 0; + bool dataLengthInsufficient = authenticatorData.length <= 32; + + checkAuthenticatorFlags@withrevert(e, authenticatorData, authenticatorFlags); + + assert lastReverted <=> (triedTransferringEth || dataLengthInsufficient); +} + +/* +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ verifySignature Reverting Conditions | +| Will only revert if function was paid or the bytes array `authenticatorData`'s in `signature` length is too small (<= 32 bytes). | +| Passes - https://prover.certora.com/output/15800/d2d34792998c479db5f38430efc7dc8b?anonymousKey=7e68511768f3da35bdb9f75c9f86d40d2e07e2aa | +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +*/ +rule verifySignatureRevertingConditions { + env e; + bytes32 challenge; + WebAuthn.Signature signature; + WebAuthn.AuthenticatorFlags authenticatorFlags; + uint256 x; + uint256 y; + P256.Verifiers verifiers; + + bool triedTransferringEth = e.msg.value != 0; + bool dataLengthInsufficient = signature.authenticatorData.length <= 32; + + verifySignature@withrevert(e, challenge, signature, authenticatorFlags, x, y, verifiers); + + assert lastReverted <=> (triedTransferringEth || dataLengthInsufficient); +} diff --git a/modules/passkey/package.json b/modules/passkey/package.json index 870c43e0..008d5d6e 100644 --- a/modules/passkey/package.json +++ b/modules/passkey/package.json @@ -34,6 +34,7 @@ "codesize": "hardhat codesize", "deploy-all": "hardhat deploy-contracts --network", "deploy": "hardhat deploy --network", + "deploy-custom": "rm -rf deployments/custom && npm run deploy custom", "fmt": "prettier --write .", "fmt:check": "prettier --check .", "lint": "pnpm run lint:sol && pnpm run lint:ts", @@ -46,7 +47,7 @@ "prepare": "pnpm run build" }, "devDependencies": { - "@noble/curves": "^1.6.0", + "@noble/curves": "^1.7.0", "@nomicfoundation/hardhat-ethers": "^3.0.8", "@nomicfoundation/hardhat-network-helpers": "^1.0.12", "@nomicfoundation/hardhat-toolbox": "^5.0.0", @@ -58,12 +59,12 @@ "@types/node": "^20.14.10", "dotenv": "^16.4.5", "ethers": "^6.13.4", - "hardhat": "^2.22.13", + "hardhat": "^2.22.16", "hardhat-deploy": "^0.12.4", "solc": "0.8.26", "solhint": "^5.0.3", "ts-node": "^10.9.2", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "dependencies": { "@account-abstraction/contracts": "0.7.0", diff --git a/modules/recovery/package.json b/modules/recovery/package.json index 15cc2d54..80272746 100644 --- a/modules/recovery/package.json +++ b/modules/recovery/package.json @@ -16,6 +16,7 @@ "build:sol": "rimraf build typechain-types && hardhat compile", "build:ts": "rimraf dist && tsc", "deploy-all": "hardhat deploy-contracts --network", + "deploy-custom": "rm -rf deployments/custom && npm run deploy custom", "lint": "pnpm run lint:ts", "lint:ts": "eslint ./src", "lint:fix": "eslint ./src --fix", @@ -43,10 +44,10 @@ "@types/yargs": "^17.0.33", "dotenv": "^16.4.5", "ethers": "^6.13.4", - "hardhat": "^2.22.13", + "hardhat": "^2.22.16", "hardhat-deploy": "^0.12.4", "solc": "0.8.20", - "typescript": "^5.6.3", + "typescript": "^5.7.2", "yargs": "^17.7.2" }, "dependencies": { diff --git a/package.json b/package.json index 33b16970..c525f87c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "pnpm": "^9" }, "devDependencies": { - "@safe-global/safe-singleton-factory": "^1.0.35", + "@safe-global/safe-singleton-factory": "^1.0.36", "@typescript-eslint/eslint-plugin": "^7.12.0", "@typescript-eslint/parser": "^7.12.0", "eslint": "^8.57.0", @@ -43,10 +43,10 @@ "eslint-plugin-no-only-tests": "^3.3.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.12", - "prettier": "^3.3.3", + "eslint-plugin-react-refresh": "^0.4.14", + "prettier": "^3.4.1", "prettier-plugin-solidity": "^1.4.1", "rimraf": "^6.0.1", - "sherif": "^1.0.0" + "sherif": "^1.0.2" } } diff --git a/packages/4337-local-bundler/package.json b/packages/4337-local-bundler/package.json index 2798d82c..07f48bed 100644 --- a/packages/4337-local-bundler/package.json +++ b/packages/4337-local-bundler/package.json @@ -20,9 +20,9 @@ "@safe-global/safe-4337-provider": "workspace:^0.0.0", "@safe-global/safe-contracts": "1.4.1-2", "ethers": "^6.13.4", - "hardhat": "^2.22.13", + "hardhat": "^2.22.16", "hardhat-deploy": "^0.12.4", "node-fetch": "^3.3.2", - "typescript": "^5.6.3" + "typescript": "^5.7.2" } } diff --git a/packages/4337-provider/package.json b/packages/4337-provider/package.json index b7c59f7a..26ffba16 100644 --- a/packages/4337-provider/package.json +++ b/packages/4337-provider/package.json @@ -13,7 +13,7 @@ "dependencies": { "ethers": "^6.13.4", "rimraf": "^6.0.1", - "typescript": "^5.6.3" + "typescript": "^5.7.2" }, "devDependencies": { "@types/node": "^20.14.10" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9a4ff24..5c3af002 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,14 +9,14 @@ importers: .: devDependencies: '@safe-global/safe-singleton-factory': - specifier: ^1.0.35 - version: 1.0.35 + specifier: ^1.0.36 + version: 1.0.36 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/parser': specifier: ^7.12.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.6.3) + version: 7.18.0(eslint@8.57.1)(typescript@5.7.2) eslint: specifier: ^8.57.0 version: 8.57.1 @@ -25,49 +25,49 @@ importers: version: 9.1.0(eslint@8.57.1) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1) + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1) eslint-plugin-no-only-tests: specifier: ^3.3.0 version: 3.3.0 eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.1) eslint-plugin-react-hooks: specifier: ^4.6.2 version: 4.6.2(eslint@8.57.1) eslint-plugin-react-refresh: - specifier: ^0.4.12 - version: 0.4.12(eslint@8.57.1) + specifier: ^0.4.14 + version: 0.4.14(eslint@8.57.1) prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.1 + version: 3.4.1 prettier-plugin-solidity: specifier: ^1.4.1 - version: 1.4.1(prettier@3.3.3) + version: 1.4.1(prettier@3.4.1) rimraf: specifier: ^6.0.1 version: 6.0.1 sherif: - specifier: ^1.0.0 - version: 1.0.0 + specifier: ^1.0.2 + version: 1.0.2 examples/4337-gas-metering: dependencies: '@alchemy/aa-accounts': specifier: 3.19.0 - version: 3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@alchemy/aa-alchemy': specifier: 3.19.0 - version: 3.19.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 3.19.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@alchemy/aa-core': specifier: 3.19.0 - version: 3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@gelatonetwork/relay-sdk': specifier: ^5.5.6 version: 5.5.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) alchemy-sdk: - specifier: 3.4.3 - version: 3.4.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + specifier: 3.5.0 + version: 3.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -76,20 +76,20 @@ importers: version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) permissionless: specifier: 0.1.45 - version: 0.1.45(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + version: 0.1.45(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) viem: - specifier: 2.21.25 - version: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + specifier: 2.21.51 + version: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) devDependencies: '@types/node': specifier: ^20.14.10 version: 20.16.11 tsx: - specifier: 4.19.1 - version: 4.19.1 + specifier: 4.19.2 + version: 4.19.2 typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 examples/4337-passkeys: dependencies: @@ -103,8 +103,8 @@ importers: specifier: 1.4.1-2 version: 1.4.1-2(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@safe-global/safe-deployments': - specifier: ^1.37.10 - version: 1.37.10 + specifier: ^1.37.18 + version: 1.37.18 '@safe-global/safe-modules-deployments': specifier: ^2.2.4 version: 2.2.4 @@ -113,7 +113,7 @@ importers: version: link:../../modules/passkey '@web3modal/ethers': specifier: ^4.1.11 - version: 4.2.3(@types/react@18.3.11)(bufferutil@4.0.8)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) + version: 4.2.3(@types/react@18.3.12)(bufferutil@4.0.8)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10) ethers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -128,26 +128,26 @@ importers: version: 6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@types/react': - specifier: ^18.3.11 - version: 18.3.11 + specifier: ^18.3.12 + version: 18.3.12 '@types/react-dom': specifier: ^18.3.1 version: 18.3.1 '@vitejs/plugin-react-swc': - specifier: ^3.7.1 - version: 3.7.1(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)) + specifier: ^3.7.2 + version: 3.7.2(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)) react-router: specifier: ^6.27.0 version: 6.27.0(react@18.3.1) typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 vite: specifier: ^5.4.8 version: 5.4.8(@types/node@22.7.5)(terser@5.34.1) vite-plugin-commonjs: - specifier: ^0.10.3 - version: 0.10.3 + specifier: ^0.10.4 + version: 0.10.4 modules/4337: dependencies: @@ -159,20 +159,20 @@ importers: version: 1.4.1-2(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@noble/curves': - specifier: ^1.6.0 - version: 1.6.0 + specifier: ^1.7.0 + version: 1.7.0 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.8 - version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.12 - version: 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(mgwu22fnyzlvtg3m5nqulvhn6q) + version: 5.0.0(jphknkhvb4qlp7o5tdqydhxlaq) '@openzeppelin/contracts': - specifier: ^5.0.2 - version: 5.0.2 + specifier: ^5.1.0 + version: 5.1.0 '@safe-global/safe-4337-local-bundler': specifier: workspace:^0.0.0 version: link:../../packages/4337-local-bundler @@ -183,8 +183,8 @@ importers: specifier: ^4.3.19 version: 4.3.20 '@types/mocha': - specifier: ^10.0.9 - version: 10.0.9 + specifier: ^10.0.10 + version: 10.0.10 '@types/node': specifier: ^20.14.10 version: 20.16.11 @@ -204,26 +204,26 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: - specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.22.16 + version: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) husky: - specifier: ^9.1.6 - version: 9.1.6 + specifier: ^9.1.7 + version: 9.1.7 solc: specifier: 0.8.23 version: 0.8.23(debug@4.3.7) solhint: specifier: ^5.0.3 - version: 5.0.3(typescript@5.6.3) + version: 5.0.3(typescript@5.7.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) + version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 yargs: specifier: ^17.7.2 version: 17.7.2 @@ -232,13 +232,13 @@ importers: devDependencies: '@nomicfoundation/hardhat-ethers': specifier: ^3.0.8 - version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.12 - version: 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(tcm4anvd7turdlcoubfczufs7u) + version: 5.0.0(mlcz65v3jm7aino6fee76ko5fm) '@openzeppelin/contracts': specifier: ^5.0.2 version: 5.0.2 @@ -246,26 +246,26 @@ importers: specifier: 1.4.1-2 version: 1.4.1-2(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10)) '@safe-global/safe-deployments': - specifier: ^1.37.10 - version: 1.37.10 + specifier: ^1.37.18 + version: 1.37.18 '@typechain/ethers-v6': specifier: ^0.5.1 - version: 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) + version: 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) '@typechain/hardhat': specifier: ^9.1.0 - version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3)) + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2)) '@types/mocha': - specifier: ^10.0.9 - version: 10.0.9 + specifier: ^10.0.10 + version: 10.0.10 '@types/node': specifier: ^20.14.10 version: 20.16.11 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/parser': specifier: ^7.12.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.6.3) + version: 7.18.0(eslint@8.57.1)(typescript@5.7.2) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -276,26 +276,26 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: - specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.22.16 + version: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) solhint: specifier: ^5.0.3 - version: 5.0.3(typescript@5.6.3) + version: 5.0.3(typescript@5.7.2) solidity-coverage: specifier: ^0.8.13 - version: 0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) + version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) typechain: specifier: ^8.3.2 - version: 8.3.2(typescript@5.6.3) + version: 8.3.2(typescript@5.7.2) typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 modules/passkey: dependencies: @@ -310,17 +310,17 @@ importers: version: 9.0.2 devDependencies: '@noble/curves': - specifier: ^1.6.0 - version: 1.6.0 + specifier: ^1.7.0 + version: 1.7.0 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.8 - version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.12 - version: 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(tcm4anvd7turdlcoubfczufs7u) + version: 5.0.0(mlcz65v3jm7aino6fee76ko5fm) '@safe-global/mock-contract': specifier: ^4.1.0 version: 4.1.0 @@ -346,8 +346,8 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: - specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.22.16 + version: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -356,13 +356,13 @@ importers: version: 0.8.26(debug@4.3.7) solhint: specifier: ^5.0.3 - version: 5.0.3(typescript@5.6.3) + version: 5.0.3(typescript@5.7.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) + version: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 modules/recovery: dependencies: @@ -378,10 +378,10 @@ importers: devDependencies: '@nomicfoundation/hardhat-ethers': specifier: ^3.0.8 - version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + version: 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(tcm4anvd7turdlcoubfczufs7u) + version: 5.0.0(mlcz65v3jm7aino6fee76ko5fm) '@types/node': specifier: ^20.14.10 version: 20.16.11 @@ -395,8 +395,8 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: - specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.22.16 + version: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -404,8 +404,8 @@ importers: specifier: 0.8.20 version: 0.8.20 typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 yargs: specifier: ^17.7.2 version: 17.7.2 @@ -417,7 +417,7 @@ importers: version: 0.7.0 '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(wgv363yuihqusgdj4dhc6v7idy) + version: 5.0.0(tnsgcpa7t6e6vf5xicof3s5ghy) '@safe-global/safe-4337-provider': specifier: workspace:^0.0.0 version: link:../4337-provider @@ -428,8 +428,8 @@ importers: specifier: ^6.13.4 version: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: - specifier: ^2.22.13 - version: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + specifier: ^2.22.16 + version: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) hardhat-deploy: specifier: ^0.12.4 version: 0.12.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -437,8 +437,8 @@ importers: specifier: ^3.3.2 version: 3.3.2 typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 packages/4337-provider: dependencies: @@ -449,8 +449,8 @@ importers: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: ^5.6.3 - version: 5.6.3 + specifier: ^5.7.2 + version: 5.7.2 devDependencies: '@types/node': specifier: ^20.14.10 @@ -1907,6 +1907,10 @@ packages: resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@1.7.0': + resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.1.2': resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} @@ -1925,6 +1929,10 @@ packages: resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.6.0': + resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -1940,36 +1948,36 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nomicfoundation/edr-darwin-arm64@0.6.3': - resolution: {integrity: sha512-hqtI7tYDqKG5PDmZ//Z65EH5cgH8VL/SAAu50rpHP7WAVfJWkOCcYbecywwF6nhHdonJbRTDGAeG1/+VOy6zew==} + '@nomicfoundation/edr-darwin-arm64@0.6.5': + resolution: {integrity: sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw==} engines: {node: '>= 18'} - '@nomicfoundation/edr-darwin-x64@0.6.3': - resolution: {integrity: sha512-4fGi79/lyOlRUORhCYsYb3sWqRHuHT7qqzyZfZuNOn8llaxmT1k36xNmvpyg37R8SzjnhT/DzoukSJrs23Ip9Q==} + '@nomicfoundation/edr-darwin-x64@0.6.5': + resolution: {integrity: sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-gnu@0.6.3': - resolution: {integrity: sha512-yFFTvGFMhfAvQ1Z2itUh1jpoUA+mVROyVELcaxjIq8fyg602lQmbS+NXkhQ+oaeDgJ+06mSENrHBg4fcfRf9cw==} + '@nomicfoundation/edr-linux-arm64-gnu@0.6.5': + resolution: {integrity: sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-arm64-musl@0.6.3': - resolution: {integrity: sha512-pOKmd0Fa3a6BHg5qbjbl/jMRELVi9oazbfiuU7Bvgn/dpTK+ID3jwT0SXiuC2zxjmPByWgXL6G9XRf5BPAM2rQ==} + '@nomicfoundation/edr-linux-arm64-musl@0.6.5': + resolution: {integrity: sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-gnu@0.6.3': - resolution: {integrity: sha512-3AUferhkLIXtLV63w5GjpHttzdxZ36i656XMy+pkBZbbiqnzIVeKWg6DJv1A94fQY16gB4gqj9CLq4CWvbNN6w==} + '@nomicfoundation/edr-linux-x64-gnu@0.6.5': + resolution: {integrity: sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==} engines: {node: '>= 18'} - '@nomicfoundation/edr-linux-x64-musl@0.6.3': - resolution: {integrity: sha512-fr6bD872WIBXe9YnTDi0CzYepMcYRgSnkVqn0yK4wRnIvKrloWhxXNVY45GVIl51aNZguBnvoA4WEt6HIazs3A==} + '@nomicfoundation/edr-linux-x64-musl@0.6.5': + resolution: {integrity: sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==} engines: {node: '>= 18'} - '@nomicfoundation/edr-win32-x64-msvc@0.6.3': - resolution: {integrity: sha512-sn34MvN1ajw2Oq1+Drpxej78Z0HfIzI4p4WlolupAV9dOZKzp2JAIQeLVfZpjIFbF3zuyxLPP4dUBrQoFPEqhA==} + '@nomicfoundation/edr-win32-x64-msvc@0.6.5': + resolution: {integrity: sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==} engines: {node: '>= 18'} - '@nomicfoundation/edr@0.6.3': - resolution: {integrity: sha512-hThe5ORR75WFYTXKL0K2AyLDxkTMrG+VQ1yL9BhQYsuh3OIH+3yNDxMz2LjfvrpOrMmJ4kk5NKdFewpqDojjXQ==} + '@nomicfoundation/edr@0.6.5': + resolution: {integrity: sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng==} engines: {node: '>= 18'} '@nomicfoundation/ethereumjs-common@4.0.4': @@ -2106,6 +2114,9 @@ packages: '@openzeppelin/contracts@5.0.2': resolution: {integrity: sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==} + '@openzeppelin/contracts@5.1.0': + resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} + '@parcel/watcher-android-arm64@2.4.1': resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -2436,8 +2447,8 @@ packages: peerDependencies: ethers: 5.4.0 - '@safe-global/safe-deployments@1.37.10': - resolution: {integrity: sha512-lcxX9CV+xdcLs4dF6Cx18zDww5JyqaX6RdcvU0o/34IgJ4Wjo3J/RNzJAoMhurCAfTGr+0vyJ9V13Qo50AR6JA==} + '@safe-global/safe-deployments@1.37.18': + resolution: {integrity: sha512-flX/TtgsbKp5qLJSSy/v7bcdtTsml6F9Vyf/JnG1Zfeto5aDeNYlvzljHAd8atnbOiggrZ8z5jyvdlh6njsXfw==} '@safe-global/safe-gateway-typescript-sdk@3.22.2': resolution: {integrity: sha512-Y0yAxRaB98LFp2Dm+ACZqBSdAmI3FlpH/LjxOZ94g/ouuDJecSq0iR26XZ5QDuEL8Rf+L4jBJaoDC08CD0KkJw==} @@ -2446,8 +2457,8 @@ packages: '@safe-global/safe-modules-deployments@2.2.4': resolution: {integrity: sha512-m396ZrBPhZVYkapTTIuizyOOtoZsCKbicl0ztgDFfDbi7KbS6AtDP6cV89AYosQxUQS+v0q4ksQd30/j3L1BtQ==} - '@safe-global/safe-singleton-factory@1.0.35': - resolution: {integrity: sha512-da61dXHFWS8u+2Xt3DLE58ZP6oIz9fzEyG8FEXZ93nupdPGigHH0UELSrlQdEUSqNsQsf5XflmBP0jYSYExSOg==} + '@safe-global/safe-singleton-factory@1.0.36': + resolution: {integrity: sha512-IlX7t6XkpbauDVJcMBtm0tuB3YT8g7rhqo4H8IMsvgla5d3hRRYQgh2QK/PaaJ9sQ4CrSmQ6dgFi0CngSVScOA==} '@scure/base@1.1.9': resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} @@ -2841,8 +2852,8 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/mocha@10.0.9': - resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==} + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -2883,8 +2894,8 @@ packages: '@types/react-dom@18.3.1': resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} - '@types/react@18.3.11': - resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/secp256k1@4.0.6': resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} @@ -2984,10 +2995,10 @@ packages: resolution: {integrity: sha512-S4+m+wh8HbWSO3DKk4LwUCPZJTpCugIsHrWR86m/OrUyvSqGDTXKFfc2sMuGXCZrD1ZqO3rhQsKgdWg3Hbb2Kw==} engines: {node: '>=10'} - '@vitejs/plugin-react-swc@3.7.1': - resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} + '@vitejs/plugin-react-swc@3.7.2': + resolution: {integrity: sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==} peerDependencies: - vite: ^4 || ^5 + vite: ^4 || ^5 || ^6 '@wagmi/connectors@4.3.10': resolution: {integrity: sha512-IZcsocBfDq6pe8sxkDgP2k9YNqv8udl2eSr2hx2JCESA44ixx5zRjoGNMAkKxlzM6uXjXLJKp/g1KYlpmoHkDg==} @@ -3282,8 +3293,8 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - alchemy-sdk@3.4.3: - resolution: {integrity: sha512-dR1iiJ2jYXk6OJN1/K88s2L+zH9qIYDPymXWliDZPTQWc6NHvnFSBk/ENvL29L+XVcPtPsoTDuJr4V1CvvZZ4g==} + alchemy-sdk@3.5.0: + resolution: {integrity: sha512-ggY7y+cM6hZKynU7mg6jBUhhAS/68kWn7dPYSyvl9TlCQZnKl3norZKLxbP972NmRDMCqKEDPyYJpvEC6kMj1w==} amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} @@ -4270,8 +4281,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.12: - resolution: {integrity: sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==} + eslint-plugin-react-refresh@0.4.14: + resolution: {integrity: sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==} peerDependencies: eslint: '>=7' @@ -4367,6 +4378,7 @@ packages: ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + deprecated: This library has been deprecated and usage is discouraged. ethereumjs-util@6.2.1: resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} @@ -4471,6 +4483,14 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -4499,10 +4519,6 @@ packages: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -4678,10 +4694,6 @@ packages: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Glob versions prior to v9 are no longer supported - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -4751,8 +4763,8 @@ packages: peerDependencies: hardhat: ^2.0.2 - hardhat@2.22.13: - resolution: {integrity: sha512-psVJX4FSXDpSXwsU8OcKTJN04pQEj9cFBMX5OPko+OFwbIoiOpvRmafa954/UaA1934npTj8sV3gaTSdx9bPbA==} + hardhat@2.22.16: + resolution: {integrity: sha512-d52yQZ09u0roL6GlgJSvtknsBtIuj9JrJ/U8VMzr/wue+gO5v2tQayvOX6llerlR57Zw2EOTQjLAt6RpHvjwHA==} hasBin: true peerDependencies: ts-node: '*' @@ -4874,8 +4886,8 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.1.6: - resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -5344,10 +5356,6 @@ packages: lit@3.1.0: resolution: {integrity: sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==} - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -5859,14 +5867,18 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + ox@0.1.2: + resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5875,10 +5887,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -5895,10 +5903,6 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -5982,6 +5986,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} @@ -6061,8 +6069,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} engines: {node: '>=14'} hasBin: true @@ -6554,38 +6562,38 @@ packages: engines: {node: '>=4'} hasBin: true - sherif-darwin-arm64@1.0.0: - resolution: {integrity: sha512-BRzDsWGjdZ6JqaDQ0HdcpapfHcnZyN24wUWpnFkljZOH78N+vB4qr+wwhmM7oyePJiO4pZWEoIBvzVT4cn1+3g==} + sherif-darwin-arm64@1.0.2: + resolution: {integrity: sha512-5Qb2iK05Bz4EyMGOCD8d2K5SMZJ1D6zdPD/10iWmkVqzKfac968maVVvS+nkEcN+fcXHn1Bfqm8vx2C1iIbs7A==} cpu: [arm64] os: [darwin] - sherif-darwin-x64@1.0.0: - resolution: {integrity: sha512-forkTw6v2N2sjvDdHGL+MqSPdLc0e7Z0v9BsmSdIKv5kdCPncVn6tRv/4xfAE7q+Xqa2a2bH9EEXppGb4gR3Tw==} + sherif-darwin-x64@1.0.2: + resolution: {integrity: sha512-Ek0aYSpeOvlRm5krMq35gLUhIdZAsYcDN9czl0eltYxhar32+DFrsG9iDqW3VmRn5E2xuaFvnKS5mVD8xegQlQ==} cpu: [x64] os: [darwin] - sherif-linux-arm64@1.0.0: - resolution: {integrity: sha512-psjD3YupFQtphWbwptM8EnU2jRkS6cnhxdxqJhMG9/yJpGsk99JD4tEmrDq0j/+T9UXZ5g7kXvQZXzocl3J62A==} + sherif-linux-arm64@1.0.2: + resolution: {integrity: sha512-H6AyfUyuZplrwcT4lkg5+Vhdwg7vujguz+JjbPRzDGqRNfunZKdnygP90AvfZp+DOJxmuthpRvXS4FJ3QNXCmg==} cpu: [arm64] os: [linux] - sherif-linux-x64@1.0.0: - resolution: {integrity: sha512-4VM2Z0xfKOEEkZ2bZppq4PAxP4RYC2eWyUq23Jl/nQFeoPMQpA9IkF51UGzxZT4WZ2kZDFftgyJeB09yPvd1CA==} + sherif-linux-x64@1.0.2: + resolution: {integrity: sha512-la8JUXRZQkrZbc7YMBc90fqdJ1YImPoL8q7Bofk/ZOFrIrkNgpLB0NRZxgSQTQAwoKyiaxa9o5wSt3T5Hb4H7A==} cpu: [x64] os: [linux] - sherif-windows-arm64@1.0.0: - resolution: {integrity: sha512-tSEzytTz3guhKLtdMCKWWru6UtmuCXD+0RsUWcqOMpzPBZZwvSr7OrTc83z8Oabmo8k6SJ5fvQeg33JSthgTqw==} + sherif-windows-arm64@1.0.2: + resolution: {integrity: sha512-XjCIR9mv1oTonubF6MDQ++xiZYonpfitMy4jODTPEgu279J4hADlHGcj4Omy92a9znBCb4jgzEvhug17n8yIAA==} cpu: [arm64] os: [win32] - sherif-windows-x64@1.0.0: - resolution: {integrity: sha512-R/KXUHBWVPU9hSlWS+Gea/ogP1h/3q/Dm/quqGrVq+MN/F+fiRsJlU52EAjAJ6G5r/4RsvQddD1ova8MKsffdw==} + sherif-windows-x64@1.0.2: + resolution: {integrity: sha512-250bdAyMy8rbN2TCeTDnas87vMIGiMe56CAWHqdDyTRGzb/oBIvS2BTfpHYKCDuK/CuEgC9E8FOBNeu0cqLe+g==} cpu: [x64] os: [win32] - sherif@1.0.0: - resolution: {integrity: sha512-x5gZqXmBT0G6Xnr2N63FwbMjaOikk/mPszl2bl3pnDMMyRi89w1ynAfcdIJpOyqZXW445418zkMIXAkQEfEtHw==} + sherif@1.0.2: + resolution: {integrity: sha512-mfu6JOchmVWNhMeObMEjd6pu1Mww4yn9VqX8+OMH7KvcUZRCcrGTETplTGDS64ANALD0Ls99ugr7z6xTXP5qUQ==} hasBin: true side-channel@1.0.6: @@ -6876,6 +6884,10 @@ packages: through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6942,8 +6954,8 @@ packages: tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} - tsx@4.19.1: - resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} hasBin: true @@ -7017,8 +7029,8 @@ packages: engines: {node: '>=12.20'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true @@ -7220,16 +7232,16 @@ packages: typescript: optional: true - viem@2.21.25: - resolution: {integrity: sha512-fQbFLVW5RjC1MwjelmzzDygmc2qMfY17NruAIIdYeiB8diQfhqsczU5zdGw/jTbmNXbKoYnSdgqMb8MFZcbZ1w==} + viem@2.21.51: + resolution: {integrity: sha512-IBZTFoo9cZvMBkFqaJq5G8Ori4IeEDe9AHE5CmOlvNw7ytkC3vdVrJ/APL+V3H4d/5i1FiV331UsckIqQLIM0w==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true - vite-plugin-commonjs@0.10.3: - resolution: {integrity: sha512-trtH4dfAqrbqwiUhSKcqrfjnlXnqLHdIbYuUy943y34JnDjIX8qlpExP0nFN+kE2s6/BS6r9d1cAHS0KtiF4yQ==} + vite-plugin-commonjs@0.10.4: + resolution: {integrity: sha512-eWQuvQKCcx0QYB5e5xfxBNjQKyrjEWZIR9UOkOV6JAgxVhtbZvCOF+FNC2ZijBJ3U3Px04ZMMyyMyFBVWIJ5+g==} vite-plugin-dynamic-import@1.6.0: resolution: {integrity: sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg==} @@ -7563,7 +7575,7 @@ snapshots: '@account-abstraction/contracts@0.7.0': dependencies: - '@openzeppelin/contracts': 5.0.2 + '@openzeppelin/contracts': 5.1.0 '@uniswap/v3-periphery': 1.4.4 '@adraffy/ens-normalize@1.10.0': {} @@ -7574,34 +7586,34 @@ snapshots: '@adraffy/ens-normalize@1.9.2': {} - '@alchemy/aa-accounts@3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@alchemy/aa-accounts@3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: - '@alchemy/aa-core': 3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@alchemy/aa-core': 3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) transitivePeerDependencies: - typescript - '@alchemy/aa-alchemy@3.19.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@alchemy/aa-alchemy@3.19.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: - '@alchemy/aa-core': 3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - '@tanstack/react-form': 0.19.5(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@alchemy/aa-core': 3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@tanstack/react-form': 0.19.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/zod-form-adapter': 0.19.5(zod@3.23.8) '@turnkey/http': 2.15.0 '@turnkey/iframe-stamper': 1.2.0 - '@turnkey/viem': 0.4.31(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@turnkey/viem': 0.4.31(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@turnkey/webauthn-stamper': 0.4.3 - '@wagmi/connectors': 4.3.10(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@wagmi/connectors': 4.3.10(@types/react@18.3.12)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) eventemitter3: 5.0.1 js-cookie: 3.0.5 - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - wagmi: 2.12.17(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + wagmi: 2.12.17(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) zod: 3.23.8 - zustand: 4.5.5(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1) + zustand: 4.5.5(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1) optionalDependencies: - '@alchemy/aa-accounts': 3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@alchemy/aa-accounts': 3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) '@tanstack/react-query': 5.59.13(react@18.3.1) - alchemy-sdk: 3.4.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + alchemy-sdk: 3.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -7633,11 +7645,11 @@ snapshots: - typescript - utf-8-validate - '@alchemy/aa-core@3.19.0(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@alchemy/aa-core@3.19.0(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: - abitype: 0.8.11(typescript@5.6.3)(zod@3.23.8) + abitype: 0.8.11(typescript@5.7.2)(zod@3.23.8) eventemitter3: 5.0.1 - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) zod: 3.23.8 transitivePeerDependencies: - typescript @@ -9047,13 +9059,13 @@ snapshots: '@hpke/dhkem-x25519@1.5.0': dependencies: '@hpke/common': 1.5.0 - '@noble/curves': 1.6.0 + '@noble/curves': 1.7.0 '@noble/hashes': 1.5.0 '@hpke/dhkem-x448@1.5.0': dependencies: '@hpke/common': 1.5.0 - '@noble/curves': 1.6.0 + '@noble/curves': 1.7.0 '@noble/hashes': 1.5.0 '@humanwhocodes/config-array@0.13.0': @@ -9293,31 +9305,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@metamask/sdk-install-modal-web@0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 22.5.1 qr-code-styling: 1.7.0 - react-i18next: 13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-i18next: 13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@metamask/sdk-install-modal-web@0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@metamask/sdk-install-modal-web@0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: i18next: 23.11.5 qr-code-styling: 1.7.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@metamask/sdk@0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 15.0.0 '@metamask/sdk-communication-layer': 0.20.2(cross-fetch@4.0.0)(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-install-modal-web': 0.20.2(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 bowser: 2.11.0 cross-fetch: 4.0.0 @@ -9330,7 +9342,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.2 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -9348,12 +9360,12 @@ snapshots: - supports-color - utf-8-validate - '@metamask/sdk@0.28.4(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': + '@metamask/sdk@0.28.4(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10)': dependencies: '@metamask/onboarding': 1.0.1 '@metamask/providers': 16.1.0 '@metamask/sdk-communication-layer': 0.28.2(cross-fetch@4.0.0)(eciesjs@0.3.20)(eventemitter2@6.4.9)(readable-stream@3.6.2)(socket.io-client@4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) - '@metamask/sdk-install-modal-web': 0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@metamask/sdk-install-modal-web': 0.28.1(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@types/dom-screen-wake-lock': 1.0.3 '@types/uuid': 10.0.0 bowser: 2.11.0 @@ -9367,7 +9379,7 @@ snapshots: obj-multiplex: 1.0.0 pump: 3.0.2 qrcode-terminal-nooctal: 0.12.1 - react-native-webview: 11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-native-webview: 11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) readable-stream: 3.6.2 rollup-plugin-visualizer: 5.12.0(rollup@4.24.0) socket.io-client: 4.8.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -9487,6 +9499,10 @@ snapshots: dependencies: '@noble/hashes': 1.5.0 + '@noble/curves@1.7.0': + dependencies: + '@noble/hashes': 1.6.0 + '@noble/hashes@1.1.2': {} '@noble/hashes@1.2.0': {} @@ -9497,6 +9513,8 @@ snapshots: '@noble/hashes@1.5.0': {} + '@noble/hashes@1.6.0': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -9511,29 +9529,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@nomicfoundation/edr-darwin-arm64@0.6.3': {} + '@nomicfoundation/edr-darwin-arm64@0.6.5': {} - '@nomicfoundation/edr-darwin-x64@0.6.3': {} + '@nomicfoundation/edr-darwin-x64@0.6.5': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.6.3': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.6.5': {} - '@nomicfoundation/edr-linux-arm64-musl@0.6.3': {} + '@nomicfoundation/edr-linux-arm64-musl@0.6.5': {} - '@nomicfoundation/edr-linux-x64-gnu@0.6.3': {} + '@nomicfoundation/edr-linux-x64-gnu@0.6.5': {} - '@nomicfoundation/edr-linux-x64-musl@0.6.3': {} + '@nomicfoundation/edr-linux-x64-musl@0.6.5': {} - '@nomicfoundation/edr-win32-x64-msvc@0.6.3': {} + '@nomicfoundation/edr-win32-x64-msvc@0.6.5': {} - '@nomicfoundation/edr@0.6.3': + '@nomicfoundation/edr@0.6.5': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.6.3 - '@nomicfoundation/edr-darwin-x64': 0.6.3 - '@nomicfoundation/edr-linux-arm64-gnu': 0.6.3 - '@nomicfoundation/edr-linux-arm64-musl': 0.6.3 - '@nomicfoundation/edr-linux-x64-gnu': 0.6.3 - '@nomicfoundation/edr-linux-x64-musl': 0.6.3 - '@nomicfoundation/edr-win32-x64-msvc': 0.6.3 + '@nomicfoundation/edr-darwin-arm64': 0.6.5 + '@nomicfoundation/edr-darwin-x64': 0.6.5 + '@nomicfoundation/edr-linux-arm64-gnu': 0.6.5 + '@nomicfoundation/edr-linux-arm64-musl': 0.6.5 + '@nomicfoundation/edr-linux-x64-gnu': 0.6.5 + '@nomicfoundation/edr-linux-x64-musl': 0.6.5 + '@nomicfoundation/edr-win32-x64-msvc': 0.6.5 '@nomicfoundation/ethereumjs-common@4.0.4': dependencies: @@ -9555,71 +9573,71 @@ snapshots: '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: debug: 4.3.7(supports-color@8.1.1) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: debug: 4.3.7(supports-color@8.1.1) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-ignition-ethers@0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ignition-ethers@0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition': 0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': 0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) '@nomicfoundation/ignition-core': 0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-ignition-ethers@0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-ignition-ethers@0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition': 0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': 0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) '@nomicfoundation/ignition-core': 0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + '@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: - '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/ignition-core': 0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@nomicfoundation/ignition-ui': 0.15.6 chalk: 4.1.2 debug: 4.3.7(supports-color@8.1.1) fs-extra: 10.1.0 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) json5: 2.2.3 prompts: 2.4.2 transitivePeerDependencies: @@ -9627,15 +9645,15 @@ snapshots: - supports-color - utf-8-validate - '@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + '@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: - '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) '@nomicfoundation/ignition-core': 0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@nomicfoundation/ignition-ui': 0.15.6 chalk: 4.1.2 debug: 4.3.7(supports-color@8.1.1) fs-extra: 10.1.0 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) json5: 2.2.3 prompts: 2.4.2 transitivePeerDependencies: @@ -9643,87 +9661,87 @@ snapshots: - supports-color - utf-8-validate - '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-toolbox@5.0.0(mgwu22fnyzlvtg3m5nqulvhn6q)': + '@nomicfoundation/hardhat-toolbox@5.0.0(jphknkhvb4qlp7o5tdqydhxlaq)': dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3)) + '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2)) '@types/chai': 4.3.20 - '@types/mocha': 10.0.9 + '@types/mocha': 10.0.10 '@types/node': 20.16.11 chai: 4.5.0 ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) - hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(debug@4.3.7)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) - solidity-coverage: 0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) - typechain: 8.3.2(typescript@5.6.3) - typescript: 5.6.3 - - '@nomicfoundation/hardhat-toolbox@5.0.0(tcm4anvd7turdlcoubfczufs7u)': - dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3)) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(debug@4.3.7)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) + typechain: 8.3.2(typescript@5.7.2) + typescript: 5.7.2 + + '@nomicfoundation/hardhat-toolbox@5.0.0(mlcz65v3jm7aino6fee76ko5fm)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2)) '@types/chai': 4.3.20 - '@types/mocha': 10.0.9 + '@types/mocha': 10.0.10 '@types/node': 20.16.11 chai: 4.5.0 ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) - hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) - solidity-coverage: 0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) - typechain: 8.3.2(typescript@5.6.3) - typescript: 5.6.3 - - '@nomicfoundation/hardhat-toolbox@5.0.0(wgv363yuihqusgdj4dhc6v7idy)': - dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3)) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) + typechain: 8.3.2(typescript@5.7.2) + typescript: 5.7.2 + + '@nomicfoundation/hardhat-toolbox@5.0.0(tnsgcpa7t6e6vf5xicof3s5ghy)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.6(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.6(@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)))(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.6(bufferutil@4.0.8)(utf-8-validate@5.0.10))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2)) '@types/chai': 4.3.20 - '@types/mocha': 10.0.9 + '@types/mocha': 10.0.10 '@types/node': 22.7.5 chai: 4.5.0 ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) - hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) - solidity-coverage: 0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)) - ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3) - typechain: 8.3.2(typescript@5.6.3) - typescript: 5.6.3 + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) + hardhat-gas-reporter: 1.0.10(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + solidity-coverage: 0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)) + ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2) + typechain: 8.3.2(typescript@5.7.2) + typescript: 5.7.2 - '@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.7(supports-color@8.1.1) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.2 @@ -9731,14 +9749,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))': + '@nomicfoundation/hardhat-verify@2.0.11(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.7(supports-color@8.1.1) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.2 @@ -9801,6 +9819,8 @@ snapshots: '@openzeppelin/contracts@5.0.2': {} + '@openzeppelin/contracts@5.1.0': {} + '@parcel/watcher-android-arm64@2.4.1': optional: true @@ -10189,14 +10209,14 @@ snapshots: '@react-native/normalize-colors@0.74.81': {} - '@react-native/virtualized-lists@0.74.81(@types/react@18.3.11)(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': + '@react-native/virtualized-lists@0.74.81(@types/react@18.3.12)(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 '@remix-run/router@1.20.0': {} @@ -10269,9 +10289,9 @@ snapshots: transitivePeerDependencies: - ethers - '@safe-global/safe-apps-provider@0.18.1(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-provider@0.18.1(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: - '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -10279,9 +10299,9 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-provider@0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-provider@0.18.3(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -10289,20 +10309,20 @@ snapshots: - utf-8-validate - zod - '@safe-global/safe-apps-sdk@8.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-sdk@8.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 - viem: 1.21.4(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 1.21.4(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)': + '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.22.2 - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) transitivePeerDependencies: - bufferutil - typescript @@ -10317,7 +10337,7 @@ snapshots: dependencies: ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - '@safe-global/safe-deployments@1.37.10': + '@safe-global/safe-deployments@1.37.18': dependencies: semver: 7.6.3 @@ -10325,7 +10345,7 @@ snapshots: '@safe-global/safe-modules-deployments@2.2.4': {} - '@safe-global/safe-singleton-factory@1.0.35': {} + '@safe-global/safe-singleton-factory@1.0.36': {} '@scure/base@1.1.9': {} @@ -10608,13 +10628,13 @@ snapshots: '@tanstack/query-core@5.59.13': {} - '@tanstack/react-form@0.19.5(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-form@0.19.5(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/form-core': 0.19.5 '@tanstack/react-store': 0.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) decode-formdata: 0.4.0 react: 18.3.1 - rehackt: 0.0.3(@types/react@18.3.11)(react@18.3.1) + rehackt: 0.0.3(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react-dom @@ -10648,26 +10668,26 @@ snapshots: '@turnkey/api-key-stamper@0.4.1': dependencies: - '@noble/curves': 1.6.0 + '@noble/curves': 1.7.0 '@turnkey/encoding': 0.2.1 sha256-uint8array: 0.10.7 '@turnkey/api-key-stamper@0.4.3': dependencies: - '@noble/curves': 1.6.0 + '@noble/curves': 1.7.0 '@turnkey/encoding': 0.4.0 sha256-uint8array: 0.10.7 - '@turnkey/crypto@0.2.1(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + '@turnkey/crypto@0.2.1(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@noble/ciphers': 0.5.3 '@noble/curves': 1.4.0 '@noble/hashes': 1.4.0 '@turnkey/encoding': 0.2.1 bs58check: 3.0.1 - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native-get-random-values: 1.11.0(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)) - react-native-quick-base64: 2.1.2(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native-get-random-values: 1.11.0(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)) + react-native-quick-base64: 2.1.2(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) typescript: 5.0.4 transitivePeerDependencies: - '@babel/core' @@ -10705,10 +10725,10 @@ snapshots: '@turnkey/iframe-stamper@2.0.0': {} - '@turnkey/sdk-browser@1.5.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + '@turnkey/sdk-browser@1.5.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@turnkey/api-key-stamper': 0.4.1 - '@turnkey/crypto': 0.2.1(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@turnkey/crypto': 0.2.1(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) '@turnkey/encoding': 0.2.1 '@turnkey/http': 2.13.0 '@turnkey/iframe-stamper': 2.0.0 @@ -10738,15 +10758,15 @@ snapshots: transitivePeerDependencies: - encoding - '@turnkey/viem@0.4.31(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@turnkey/viem@0.4.31(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: '@turnkey/api-key-stamper': 0.4.1 '@turnkey/http': 2.13.0 - '@turnkey/sdk-browser': 1.5.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@turnkey/sdk-browser': 1.5.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) '@turnkey/sdk-server': 1.3.0 cross-fetch: 4.0.0 - typescript: 5.6.3 - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + typescript: 5.7.2 + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -10766,29 +10786,29 @@ snapshots: dependencies: sha256-uint8array: 0.10.7 - '@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3)': + '@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2)': dependencies: ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) lodash: 4.17.21 - ts-essentials: 7.0.3(typescript@5.6.3) - typechain: 8.3.2(typescript@5.6.3) - typescript: 5.6.3 + ts-essentials: 7.0.3(typescript@5.7.2) + typechain: 8.3.2(typescript@5.7.2) + typescript: 5.7.2 - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))': dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) - typechain: 8.3.2(typescript@5.6.3) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) + typechain: 8.3.2(typescript@5.7.2) - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2))(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))': dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.6.3))(typescript@5.6.3) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.2))(typescript@5.7.2) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) - typechain: 8.3.2(typescript@5.6.3) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) + typechain: 8.3.2(typescript@5.7.2) '@types/bn.js@4.11.6': dependencies: @@ -10843,7 +10863,7 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/mocha@10.0.9': {} + '@types/mocha@10.0.10': {} '@types/ms@0.7.34': {} @@ -10881,9 +10901,9 @@ snapshots: '@types/react-dom@18.3.1': dependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 - '@types/react@18.3.11': + '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 @@ -10908,34 +10928,34 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.1 optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -10944,21 +10964,21 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -10967,18 +10987,18 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) + ts-api-utils: 1.3.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.3)': + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -11005,25 +11025,25 @@ snapshots: '@uniswap/v3-core': 1.0.1 base64-sol: 1.0.1 - '@vitejs/plugin-react-swc@3.7.1(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))': + '@vitejs/plugin-react-swc@3.7.2(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))': dependencies: '@swc/core': 1.7.35 vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1) transitivePeerDependencies: - '@swc/helpers' - '@wagmi/connectors@4.3.10(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@4.3.10(@types/react@18.3.12)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: '@coinbase/wallet-sdk': 3.9.1 - '@metamask/sdk': 0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@walletconnect/modal': 2.6.2(@types/react@18.3.11)(react@18.3.1) - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + '@metamask/sdk': 0.20.3(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.1(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 8.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@walletconnect/modal': 2.6.2(@types/react@18.3.12)(react@18.3.1) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11050,19 +11070,19 @@ snapshots: - utf-8-validate - zod - '@wagmi/connectors@5.1.15(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': + '@wagmi/connectors@5.1.15(@types/react@18.3.12)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8)': dependencies: '@coinbase/wallet-sdk': 4.0.4 - '@metamask/sdk': 0.28.4(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) - '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - '@walletconnect/modal': 2.7.0(@types/react@18.3.11)(react@18.3.1) + '@metamask/sdk': 0.28.4(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.3(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@walletconnect/ethereum-provider': 2.17.0(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@walletconnect/modal': 2.7.0(@types/react@18.3.12)(react@18.3.1) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11088,15 +11108,15 @@ snapshots: - utf-8-validate - zod - '@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))': + '@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))': dependencies: eventemitter3: 5.0.1 - mipd: 0.0.7(typescript@5.6.3) - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) - zustand: 4.4.1(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1) + mipd: 0.0.7(typescript@5.7.2) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) + zustand: 4.4.1(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1) optionalDependencies: '@tanstack/query-core': 5.59.13 - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - '@types/react' - immer @@ -11178,13 +11198,13 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/ethereum-provider@2.13.0(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + '@walletconnect/ethereum-provider@2.13.0(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/modal': 2.6.2(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal': 2.6.2(@types/react@18.3.12)(react@18.3.1) '@walletconnect/sign-client': 2.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@walletconnect/types': 2.13.0 '@walletconnect/universal-provider': 2.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -11210,13 +11230,13 @@ snapshots: - react - utf-8-validate - '@walletconnect/ethereum-provider@2.17.0(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': + '@walletconnect/ethereum-provider@2.17.0(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.8 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/modal': 2.7.0(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal': 2.7.0(@types/react@18.3.12)(react@18.3.1) '@walletconnect/sign-client': 2.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@walletconnect/types': 2.17.0 '@walletconnect/universal-provider': 2.17.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -11324,23 +11344,23 @@ snapshots: '@walletconnect/safe-json': 1.0.2 pino: 7.11.0 - '@walletconnect/modal-core@2.6.2(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal-core@2.6.2(@types/react@18.3.12)(react@18.3.1)': dependencies: - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@walletconnect/modal-core@2.7.0(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal-core@2.7.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@walletconnect/modal-ui@2.6.2(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal-ui@2.6.2(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.6.2(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal-core': 2.6.2(@types/react@18.3.12)(react@18.3.1) lit: 2.8.0 motion: 10.16.2 qrcode: 1.5.3 @@ -11348,9 +11368,9 @@ snapshots: - '@types/react' - react - '@walletconnect/modal-ui@2.7.0(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal-ui@2.7.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.7.0(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal-core': 2.7.0(@types/react@18.3.12)(react@18.3.1) lit: 2.8.0 motion: 10.16.2 qrcode: 1.5.3 @@ -11358,18 +11378,18 @@ snapshots: - '@types/react' - react - '@walletconnect/modal@2.6.2(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal@2.6.2(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.6.2(@types/react@18.3.11)(react@18.3.1) - '@walletconnect/modal-ui': 2.6.2(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal-core': 2.6.2(@types/react@18.3.12)(react@18.3.1) + '@walletconnect/modal-ui': 2.6.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@walletconnect/modal@2.7.0(@types/react@18.3.11)(react@18.3.1)': + '@walletconnect/modal@2.7.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@walletconnect/modal-core': 2.7.0(@types/react@18.3.11)(react@18.3.1) - '@walletconnect/modal-ui': 2.7.0(@types/react@18.3.11)(react@18.3.1) + '@walletconnect/modal-core': 2.7.0(@types/react@18.3.12)(react@18.3.1) + '@walletconnect/modal-ui': 2.7.0(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react @@ -11692,27 +11712,27 @@ snapshots: bignumber.js: 9.1.2 dayjs: 1.11.10 - '@web3modal/core@4.2.3(@types/react@18.3.11)(react@18.3.1)': + '@web3modal/core@4.2.3(@types/react@18.3.12)(react@18.3.1)': dependencies: '@web3modal/common': 4.2.3 '@web3modal/wallet': 4.2.3 - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@web3modal/ethers@4.2.3(@types/react@18.3.11)(bufferutil@4.0.8)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10)': + '@web3modal/ethers@4.2.3(@types/react@18.3.12)(bufferutil@4.0.8)(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10)': dependencies: '@coinbase/wallet-sdk': 4.0.0 - '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + '@walletconnect/ethereum-provider': 2.13.0(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) '@web3modal/polyfills': 4.2.3 - '@web3modal/scaffold': 4.2.3(@types/react@18.3.11)(react@18.3.1) - '@web3modal/scaffold-react': 4.2.3(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@web3modal/scaffold-utils': 4.2.3(@types/react@18.3.11)(react@18.3.1) - '@web3modal/scaffold-vue': 4.2.3(@types/react@18.3.11)(react@18.3.1) - '@web3modal/siwe': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/scaffold': 4.2.3(@types/react@18.3.12)(react@18.3.1) + '@web3modal/scaffold-react': 4.2.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@web3modal/scaffold-utils': 4.2.3(@types/react@18.3.12)(react@18.3.1) + '@web3modal/scaffold-vue': 4.2.3(@types/react@18.3.12)(react@18.3.1) + '@web3modal/siwe': 4.2.3(@types/react@18.3.12)(react@18.3.1) ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11739,9 +11759,9 @@ snapshots: dependencies: buffer: 6.0.3 - '@web3modal/scaffold-react@4.2.3(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@web3modal/scaffold-react@4.2.3(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@web3modal/scaffold': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/scaffold': 4.2.3(@types/react@18.3.12)(react@18.3.1) optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -11761,18 +11781,18 @@ snapshots: - '@vercel/kv' - ioredis - '@web3modal/scaffold-utils@4.2.3(@types/react@18.3.11)(react@18.3.1)': + '@web3modal/scaffold-utils@4.2.3(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@web3modal/core': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/core': 4.2.3(@types/react@18.3.12)(react@18.3.1) '@web3modal/polyfills': 4.2.3 - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - react - '@web3modal/scaffold-vue@4.2.3(@types/react@18.3.11)(react@18.3.1)': + '@web3modal/scaffold-vue@4.2.3(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@web3modal/scaffold': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/scaffold': 4.2.3(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11790,11 +11810,11 @@ snapshots: - ioredis - react - '@web3modal/scaffold@4.2.3(@types/react@18.3.11)(react@18.3.1)': + '@web3modal/scaffold@4.2.3(@types/react@18.3.12)(react@18.3.1)': dependencies: '@web3modal/common': 4.2.3 - '@web3modal/core': 4.2.3(@types/react@18.3.11)(react@18.3.1) - '@web3modal/siwe': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/core': 4.2.3(@types/react@18.3.12)(react@18.3.1) + '@web3modal/siwe': 4.2.3(@types/react@18.3.12)(react@18.3.1) '@web3modal/ui': 4.2.3 '@web3modal/wallet': 4.2.3 lit: 3.1.0 @@ -11815,13 +11835,13 @@ snapshots: - ioredis - react - '@web3modal/siwe@4.2.3(@types/react@18.3.11)(react@18.3.1)': + '@web3modal/siwe@4.2.3(@types/react@18.3.12)(react@18.3.1)': dependencies: '@walletconnect/utils': 2.12.0 - '@web3modal/core': 4.2.3(@types/react@18.3.11)(react@18.3.1) - '@web3modal/scaffold-utils': 4.2.3(@types/react@18.3.11)(react@18.3.1) + '@web3modal/core': 4.2.3(@types/react@18.3.12)(react@18.3.1) + '@web3modal/scaffold-utils': 4.2.3(@types/react@18.3.12)(react@18.3.1) lit: 3.1.0 - valtio: 1.11.2(@types/react@18.3.11)(react@18.3.1) + valtio: 1.11.2(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11851,20 +11871,20 @@ snapshots: abbrev@1.0.9: {} - abitype@0.8.11(typescript@5.6.3)(zod@3.23.8): + abitype@0.8.11(typescript@5.7.2)(zod@3.23.8): dependencies: - typescript: 5.6.3 + typescript: 5.7.2 optionalDependencies: zod: 3.23.8 - abitype@0.9.8(typescript@5.6.3)(zod@3.23.8): + abitype@0.9.8(typescript@5.7.2)(zod@3.23.8): optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 zod: 3.23.8 - abitype@1.0.6(typescript@5.6.3)(zod@3.23.8): + abitype@1.0.6(typescript@5.7.2)(zod@3.23.8): optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 zod: 3.23.8 abort-controller@3.0.0: @@ -11917,7 +11937,7 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - alchemy-sdk@3.4.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + alchemy-sdk@3.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/abstract-provider': 5.7.0 @@ -12552,14 +12572,14 @@ snapshots: js-yaml: 3.14.1 parse-json: 4.0.0 - cosmiconfig@8.3.6(typescript@5.6.3): + cosmiconfig@8.3.6(typescript@5.7.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 crc-32@1.2.2: {} @@ -13007,17 +13027,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -13028,7 +13048,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -13040,7 +13060,7 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13048,10 +13068,10 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.1): dependencies: eslint: 8.57.1 - prettier: 3.3.3 + prettier: 3.4.1 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: @@ -13061,7 +13081,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.12(eslint@8.57.1): + eslint-plugin-react-refresh@0.4.14(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -13428,6 +13448,10 @@ snapshots: dependencies: bser: 2.1.1 + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -13465,10 +13489,6 @@ snapshots: dependencies: array-back: 3.1.0 - find-up@2.1.0: - dependencies: - locate-path: 2.0.0 - find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -13653,15 +13673,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@7.2.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -13797,11 +13808,11 @@ snapshots: - supports-color - utf-8-validate - hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(debug@4.3.7)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(debug@4.3.7)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.8)(debug@4.3.7)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -13809,11 +13820,11 @@ snapshots: - debug - utf-8-validate - hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.8)(debug@4.3.7)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -13821,11 +13832,11 @@ snapshots: - debug - utf-8-validate - hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): + hardhat-gas-reporter@1.0.10(bufferutil@4.0.8)(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10): dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27(bufferutil@4.0.8)(debug@4.3.7)(utf-8-validate@5.0.10) - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -13833,11 +13844,11 @@ snapshots: - debug - utf-8-validate - hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): + hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.6.3 + '@nomicfoundation/edr': 0.6.5 '@nomicfoundation/ethereumjs-common': 4.0.4 '@nomicfoundation/ethereumjs-tx': 5.0.4 '@nomicfoundation/ethereumjs-util': 9.0.4 @@ -13849,7 +13860,6 @@ snapshots: aggregate-error: 3.1.0 ansi-escapes: 4.3.2 boxen: 5.1.2 - chalk: 2.4.2 chokidar: 4.0.1 ci-info: 2.0.0 debug: 4.3.7(supports-color@8.1.1) @@ -13857,10 +13867,9 @@ snapshots: env-paths: 2.2.1 ethereum-cryptography: 1.2.0 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.3.7 io-ts: 1.10.4 json-stream-stringify: 3.1.6 @@ -13869,30 +13878,32 @@ snapshots: mnemonist: 0.38.5 mocha: 10.7.3 p-map: 4.0.0 + picocolors: 1.1.0 raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 solc: 0.8.26(debug@4.3.7) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 + tinyglobby: 0.2.10 tsort: 0.0.1 undici: 5.28.4 uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3) - typescript: 5.6.3 + ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - bufferutil - c-kzg - supports-color - utf-8-validate - hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10): + hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/edr': 0.6.3 + '@nomicfoundation/edr': 0.6.5 '@nomicfoundation/ethereumjs-common': 4.0.4 '@nomicfoundation/ethereumjs-tx': 5.0.4 '@nomicfoundation/ethereumjs-util': 9.0.4 @@ -13904,7 +13915,6 @@ snapshots: aggregate-error: 3.1.0 ansi-escapes: 4.3.2 boxen: 5.1.2 - chalk: 2.4.2 chokidar: 4.0.1 ci-info: 2.0.0 debug: 4.3.7(supports-color@8.1.1) @@ -13912,10 +13922,9 @@ snapshots: env-paths: 2.2.1 ethereum-cryptography: 1.2.0 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.3.7 io-ts: 1.10.4 json-stream-stringify: 3.1.6 @@ -13924,19 +13933,21 @@ snapshots: mnemonist: 0.38.5 mocha: 10.7.3 p-map: 4.0.0 + picocolors: 1.1.0 raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 solc: 0.8.26(debug@4.3.7) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 + tinyglobby: 0.2.10 tsort: 0.0.1 undici: 5.28.4 uuid: 8.3.2 ws: 7.5.10(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3) - typescript: 5.6.3 + ts-node: 10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - bufferutil - c-kzg @@ -14058,7 +14069,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.1.6: {} + husky@9.1.7: {} i18next-browser-languagedetector@7.1.0: dependencies: @@ -14541,11 +14552,6 @@ snapshots: lit-element: 4.1.1 lit-html: 3.2.1 - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -14872,9 +14878,9 @@ snapshots: minipass@7.1.2: {} - mipd@0.0.7(typescript@5.6.3): + mipd@0.0.7(typescript@5.7.2): optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 mkdirp@0.5.6: dependencies: @@ -15151,11 +15157,21 @@ snapshots: os-tmpdir@1.0.2: {} - p-cancelable@3.0.0: {} - - p-limit@1.3.0: + ox@0.1.2(typescript@5.7.2)(zod@3.23.8): dependencies: - p-try: 1.0.0 + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.7.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.7.2)(zod@3.23.8) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.2 + transitivePeerDependencies: + - zod + + p-cancelable@3.0.0: {} p-limit@2.3.0: dependencies: @@ -15165,10 +15181,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -15185,8 +15197,6 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-try@1.0.0: {} - p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -15249,14 +15259,16 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - permissionless@0.1.45(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)): + permissionless@0.1.45(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)): dependencies: - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) picocolors@1.1.0: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@3.0.0: {} pify@4.0.1: {} @@ -15320,15 +15332,15 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-solidity@1.4.1(prettier@3.3.3): + prettier-plugin-solidity@1.4.1(prettier@3.4.1): dependencies: '@solidity-parser/parser': 0.18.0 - prettier: 3.3.3 + prettier: 3.4.1 semver: 7.6.3 prettier@2.8.8: {} - prettier@3.3.3: {} + prettier@3.4.1: {} pretty-format@26.6.2: dependencies: @@ -15449,39 +15461,39 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-i18next@13.5.0(i18next@22.5.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-i18next@13.5.0(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@babel/runtime': 7.25.7 html-parse-stringify: 3.0.1 - i18next: 22.5.1 + i18next: 23.11.5 react: 18.3.1 optionalDependencies: react-dom: 18.3.1(react@18.3.1) - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) react-is@17.0.2: {} react-is@18.3.1: {} - react-native-get-random-values@1.11.0(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)): + react-native-get-random-values@1.11.0(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: fast-base64-decode: 1.0.0 - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native-quick-base64@2.1.2(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-quick-base64@2.1.2(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: base64-js: 1.5.1 react: 18.3.1 - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native-webview@11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): + react-native-webview@11.26.1(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.3.1 - react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10) - react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10): + react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 13.6.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) @@ -15493,7 +15505,7 @@ snapshots: '@react-native/gradle-plugin': 0.74.81 '@react-native/js-polyfills': 0.74.81 '@react-native/normalize-colors': 0.74.81 - '@react-native/virtualized-lists': 0.74.81(@types/react@18.3.11)(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + '@react-native/virtualized-lists': 0.74.81(@types/react@18.3.12)(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -15522,7 +15534,7 @@ snapshots: ws: 6.2.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) yargs: 17.7.2 optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' @@ -15642,9 +15654,9 @@ snapshots: dependencies: jsesc: 3.0.2 - rehackt@0.0.3(@types/react@18.3.11)(react@18.3.1): + rehackt@0.0.3(@types/react@18.3.12)(react@18.3.1): optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 react: 18.3.1 req-cwd@2.0.0: @@ -15905,32 +15917,32 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - sherif-darwin-arm64@1.0.0: + sherif-darwin-arm64@1.0.2: optional: true - sherif-darwin-x64@1.0.0: + sherif-darwin-x64@1.0.2: optional: true - sherif-linux-arm64@1.0.0: + sherif-linux-arm64@1.0.2: optional: true - sherif-linux-x64@1.0.0: + sherif-linux-x64@1.0.2: optional: true - sherif-windows-arm64@1.0.0: + sherif-windows-arm64@1.0.2: optional: true - sherif-windows-x64@1.0.0: + sherif-windows-x64@1.0.2: optional: true - sherif@1.0.0: + sherif@1.0.2: optionalDependencies: - sherif-darwin-arm64: 1.0.0 - sherif-darwin-x64: 1.0.0 - sherif-linux-arm64: 1.0.0 - sherif-linux-x64: 1.0.0 - sherif-windows-arm64: 1.0.0 - sherif-windows-x64: 1.0.0 + sherif-darwin-arm64: 1.0.2 + sherif-darwin-x64: 1.0.2 + sherif-linux-arm64: 1.0.2 + sherif-linux-x64: 1.0.2 + sherif-windows-arm64: 1.0.2 + sherif-windows-x64: 1.0.2 side-channel@1.0.6: dependencies: @@ -16014,7 +16026,7 @@ snapshots: transitivePeerDependencies: - debug - solhint@5.0.3(typescript@5.6.3): + solhint@5.0.3(typescript@5.7.2): dependencies: '@solidity-parser/parser': 0.18.0 ajv: 6.12.6 @@ -16022,7 +16034,7 @@ snapshots: ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 - cosmiconfig: 8.3.6(typescript@5.6.3) + cosmiconfig: 8.3.6(typescript@5.7.2) fast-diff: 1.3.0 glob: 8.1.0 ignore: 5.3.2 @@ -16039,7 +16051,7 @@ snapshots: transitivePeerDependencies: - typescript - solidity-coverage@0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.18.0 @@ -16050,7 +16062,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) jsonschema: 1.4.1 lodash: 4.17.21 mocha: 10.7.3 @@ -16062,7 +16074,7 @@ snapshots: shelljs: 0.8.5 web3-utils: 1.10.4 - solidity-coverage@0.8.13(hardhat@2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10)): + solidity-coverage@0.8.13(hardhat@2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.18.0 @@ -16073,7 +16085,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.13(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3))(typescript@5.6.3)(utf-8-validate@5.0.10) + hardhat: 2.22.16(bufferutil@4.0.8)(ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2))(typescript@5.7.2)(utf-8-validate@5.0.10) jsonschema: 1.4.1 lodash: 4.17.21 mocha: 10.7.3 @@ -16315,6 +16327,11 @@ snapshots: dependencies: readable-stream: 3.6.2 + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -16331,9 +16348,9 @@ snapshots: tr46@0.0.3: {} - ts-api-utils@1.3.0(typescript@5.6.3): + ts-api-utils@1.3.0(typescript@5.7.2): dependencies: - typescript: 5.6.3 + typescript: 5.7.2 ts-command-line-args@2.5.1: dependencies: @@ -16342,11 +16359,11 @@ snapshots: command-line-usage: 6.1.3 string-format: 2.0.0 - ts-essentials@7.0.3(typescript@5.6.3): + ts-essentials@7.0.3(typescript@5.7.2): dependencies: - typescript: 5.6.3 + typescript: 5.7.2 - ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.7.35)(@types/node@20.16.11)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -16360,13 +16377,13 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.3 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: '@swc/core': 1.7.35 - ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.7.35)(@types/node@22.7.5)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -16380,7 +16397,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.3 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: @@ -16401,7 +16418,7 @@ snapshots: tsort@0.0.1: {} - tsx@4.19.1: + tsx@4.19.2: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.1 @@ -16432,7 +16449,7 @@ snapshots: type@2.7.3: {} - typechain@8.3.2(typescript@5.6.3): + typechain@8.3.2(typescript@5.7.2): dependencies: '@types/prettier': 2.7.3 debug: 4.3.7(supports-color@8.1.1) @@ -16443,8 +16460,8 @@ snapshots: mkdirp: 1.0.4 prettier: 2.8.8 ts-command-line-args: 2.5.1 - ts-essentials: 7.0.3(typescript@5.6.3) - typescript: 5.6.3 + ts-essentials: 7.0.3(typescript@5.7.2) + typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -16488,7 +16505,7 @@ snapshots: typescript@5.0.4: {} - typescript@5.6.3: {} + typescript@5.7.2: {} typical@4.0.0: {} @@ -16620,52 +16637,52 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - valtio@1.11.2(@types/react@18.3.11)(react@18.3.1): + valtio@1.11.2(@types/react@18.3.12)(react@18.3.1): dependencies: proxy-compare: 2.5.1 use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 react: 18.3.1 vary@1.1.2: {} - viem@1.21.4(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8): + viem@1.21.4(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - abitype: 0.9.8(typescript@5.6.3)(zod@3.23.8) + abitype: 0.9.8(typescript@5.7.2)(zod@3.23.8) isows: 1.0.3(ws@8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) ws: 8.13.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8): + viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8): dependencies: - '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@scure/bip32': 1.5.0 '@scure/bip39': 1.4.0 - abitype: 1.0.6(typescript@5.6.3)(zod@3.23.8) + abitype: 1.0.6(typescript@5.7.2)(zod@3.23.8) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)) + ox: 0.1.2(typescript@5.7.2)(zod@3.23.8) webauthn-p256: 0.0.10 ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-plugin-commonjs@0.10.3: + vite-plugin-commonjs@0.10.4: dependencies: acorn: 8.12.1 magic-string: 0.30.12 @@ -16692,16 +16709,16 @@ snapshots: void-elements@3.1.0: {} - wagmi@2.12.17(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.11)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): + wagmi@2.12.17(@tanstack/query-core@5.59.13)(@tanstack/react-query@5.59.13(react@18.3.1))(@types/react@18.3.12)(bufferutil@4.0.8)(immer@10.0.2)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8): dependencies: '@tanstack/react-query': 5.59.13(react@18.3.1) - '@wagmi/connectors': 5.1.15(@types/react@18.3.11)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.11)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) - '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1)(typescript@5.6.3)(viem@2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8)) + '@wagmi/connectors': 5.1.15(@types/react@18.3.12)(@wagmi/core@2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)))(bufferutil@4.0.8)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.0(@babel/core@7.25.8)(@babel/preset-env@7.25.8(@babel/core@7.25.8))(@types/react@18.3.12)(bufferutil@4.0.8)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(rollup@4.24.0)(typescript@5.7.2)(utf-8-validate@5.0.10)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8))(zod@3.23.8) + '@wagmi/core': 2.13.8(@tanstack/query-core@5.59.13)(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1)(typescript@5.7.2)(viem@2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8)) react: 18.3.1 use-sync-external-store: 1.2.0(react@18.3.1) - viem: 2.21.25(bufferutil@4.0.8)(typescript@5.6.3)(utf-8-validate@5.0.10)(zod@3.23.8) + viem: 2.21.51(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.23.8) optionalDependencies: - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -16751,7 +16768,7 @@ snapshots: webauthn-p256@0.0.10: dependencies: - '@noble/curves': 1.6.0 + '@noble/curves': 1.7.0 '@noble/hashes': 1.5.0 webextension-polyfill@0.10.0: {} @@ -16961,18 +16978,18 @@ snapshots: zod@3.23.8: {} - zustand@4.4.1(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1): + zustand@4.4.1(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1): dependencies: use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 immer: 10.0.2 react: 18.3.1 - zustand@4.5.5(@types/react@18.3.11)(immer@10.0.2)(react@18.3.1): + zustand@4.5.5(@types/react@18.3.12)(immer@10.0.2)(react@18.3.1): dependencies: use-sync-external-store: 1.2.2(react@18.3.1) optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 immer: 10.0.2 react: 18.3.1