diff --git a/.changeset/solidity-57-crosschain.md b/.changeset/solidity-57-crosschain.md new file mode 100644 index 000000000..88f215dc5 --- /dev/null +++ b/.changeset/solidity-57-crosschain.md @@ -0,0 +1,13 @@ +--- +'@openzeppelin/wizard': patch +'@openzeppelin/wizard-common': patch +'@openzeppelin/contracts-mcp': patch +'@openzeppelin/contracts-cli': patch +--- + +Add Solidity cross-chain options for ERC721, ERC1155, and Governor using OpenZeppelin Contracts 5.7. +- ERC721/ERC1155: Add `crossChainBridging` and `crossChainLinkAllowOverride` options, using `ERC721Crosschain`/`ERC1155Crosschain`. +- Governor: Add `crossChainExecution` option, using `GovernorCrosschain`. +- Account: Update the `IERC4337` import path, which dropped its `draft-` prefix in Contracts 5.7. +- Fix compile errors in upgradeable ERC20 `crossChainBridging` variants. +- **Potentially breaking change**: Update to OpenZeppelin Contracts 5.7.0. diff --git a/packages/cli/src/cli.test.ts.md b/packages/cli/src/cli.test.ts.md index c07e35189..0b67d12f7 100644 --- a/packages/cli/src/cli.test.ts.md +++ b/packages/cli/src/cli.test.ts.md @@ -81,6 +81,8 @@ Generated by [AVA](https://avajs.dev). --mintable Whether privileged accounts will be able to create more supply or emit more tokens␊ --incremental Whether new tokens will be automatically assigned an incremental id␊ --votes Whether to keep track of individual units for voting in on-chain governance. Voting durations can be expressed as block numbers or timestamps (defaulting to block number if not specified).␊ + --crossChainBridging Whether to embed an ERC-7786 based bridge directly in the token contract, making it natively crosschain. Cross-chain transfers with registered counterparts burn the token on the source chain and mint it on the destination chain. If also using incremental token ids, mint only on a single chain and link counterparts without minting, otherwise colliding ids can strand bridged tokens.␊ + --crossChainLinkAllowOverride Whether to allow replacing a crosschain link that has already been registered. Only used if crossChainBridging is set to "erc7786native".␊ --access The type of access control to provision. Ownable is a simple mechanism with a single account authorized for all privileged actions. Roles is a flexible mechanism with a separate role for each privileged action. A role can have many authorized accounts. Managed enables a central contract to define a policy that allows certain callers to access certain functions.␊ --upgradeable Whether the smart contract is upgradeable. Transparent uses more complex proxy with higher overhead, requires less changes in your contract. Can also be used with beacons. UUPS uses simpler proxy with less overhead, requires including extra code in your contract. Allows flexibility for authorizing upgrades.␊ --info.securityContact Email where people can contact you to report security issues. Will only be visible if contract source code is verified.␊ @@ -104,6 +106,8 @@ Generated by [AVA](https://avajs.dev). --mintable Whether privileged accounts will be able to create more supply or emit more tokens␊ --supply Whether to keep track of total supply of tokens␊ --updatableUri Whether privileged accounts will be able to set a new URI for all token types␊ + --crossChainBridging Whether to embed an ERC-7786 based bridge directly in the token contract, making it natively crosschain. Cross-chain transfers with registered counterparts burn the tokens on the source chain and mint them on the destination chain.␊ + --crossChainLinkAllowOverride Whether to allow replacing a crosschain link that has already been registered. Only used if crossChainBridging is set to "erc7786native".␊ --access The type of access control to provision. Ownable is a simple mechanism with a single account authorized for all privileged actions. Roles is a flexible mechanism with a separate role for each privileged action. A role can have many authorized accounts. Managed enables a central contract to define a policy that allows certain callers to access certain functions.␊ --upgradeable Whether the smart contract is upgradeable. Transparent uses more complex proxy with higher overhead, requires less changes in your contract. Can also be used with beacons. UUPS uses simpler proxy with less overhead, requires including extra code in your contract. Allows flexibility for authorizing upgrades.␊ --info.securityContact Email where people can contact you to report security issues. Will only be visible if contract source code is verified.␊ @@ -223,6 +227,7 @@ Generated by [AVA](https://avajs.dev). --quorumAbsolute The absolute quorum required, in cases of quorumMode equals absolute␊ --storage Enable storage of proposal details and enumerability of proposals␊ --settings Allow governance to update voting settings (delay, period, proposal threshold)␊ + --crossChainExecution Whether passed proposals can relay execution to other chains through ERC-7786 gateways. Requires a CrosschainRemoteExecutor contract, controlled by this governor, deployed on each target chain. The gateway and executor are chosen per proposal as arguments to the relayCrosschain function.␊ --upgradeable Whether the smart contract is upgradeable. Transparent uses more complex proxy with higher overhead, requires less changes in your contract. Can also be used with beacons. UUPS uses simpler proxy with less overhead, requires including extra code in your contract. Allows flexibility for authorizing upgrades.␊ --info.securityContact Email where people can contact you to report security issues. Will only be visible if contract source code is verified.␊ --info.license The license used by the contract, default is "MIT"␊ diff --git a/packages/cli/src/cli.test.ts.snap b/packages/cli/src/cli.test.ts.snap index aef69e1a9..d947d2712 100644 Binary files a/packages/cli/src/cli.test.ts.snap and b/packages/cli/src/cli.test.ts.snap differ diff --git a/packages/common/src/ai/descriptions/solidity.ts b/packages/common/src/ai/descriptions/solidity.ts index 44308014e..19504ad32 100644 --- a/packages/common/src/ai/descriptions/solidity.ts +++ b/packages/common/src/ai/descriptions/solidity.ts @@ -13,6 +13,10 @@ export const solidityPrompts = { Custom: 'Make a custom smart contract.', }; +// Shared by every token kind that supports ERC-7786 native bridging. +const crossChainLinkAllowOverrideDescription = + 'Whether to allow replacing a crosschain link that has already been registered. Only used if crossChainBridging is set to "erc7786native".'; + export const solidityCommonDescriptions = { access: 'The type of access control to provision. Ownable is a simple mechanism with a single account authorized for all privileged actions. Roles is a flexible mechanism with a separate role for each privileged action. A role can have many authorized accounts. Managed enables a central contract to define a policy that allows certain callers to access certain functions.', @@ -33,8 +37,7 @@ export const solidityERC20Descriptions = { "Whether to include built-in flash loans to allow lending tokens without requiring collateral as long as they're returned in the same transaction.", crossChainBridging: 'Whether to allow authorized bridge contracts to mint and burn tokens for cross-chain transfers. Options are to use custom bridges on any chain, to embed an ERC-7786 based bridge directly in the token contract, or to use the SuperchainERC20 standard with the predeployed SuperchainTokenBridge. The SuperchainERC20 feature is only available on chains in the Superchain, and requires deploying your contract to the same address on every chain in the Superchain.', - crossChainLinkAllowOverride: - 'Whether to allow replacing a crosschain link that has already been registered. Only used if crossChainBridging is set to "erc7786native".', + crossChainLinkAllowOverride: crossChainLinkAllowOverrideDescription, premintChainId: 'The chain ID of the network on which to premint tokens.', callback: 'Whether to include support for code execution after transfers and approvals on recipient contracts in a single transaction.', @@ -48,12 +51,18 @@ export const solidityERC721Descriptions = { incremental: 'Whether new tokens will be automatically assigned an incremental id', votes: 'Whether to keep track of individual units for voting in on-chain governance. Voting durations can be expressed as block numbers or timestamps (defaulting to block number if not specified).', + crossChainBridging: + 'Whether to embed an ERC-7786 based bridge directly in the token contract, making it natively crosschain. Cross-chain transfers with registered counterparts burn the token on the source chain and mint it on the destination chain. If also using incremental token ids, mint only on a single chain and link counterparts without minting, otherwise colliding ids can strand bridged tokens.', + crossChainLinkAllowOverride: crossChainLinkAllowOverrideDescription, }; export const solidityERC1155Descriptions = { uri: 'The location of the metadata for the token. Clients will replace any instance of {id} in this string with the tokenId.', supply: 'Whether to keep track of total supply of tokens', updatableUri: 'Whether privileged accounts will be able to set a new URI for all token types', + crossChainBridging: + 'Whether to embed an ERC-7786 based bridge directly in the token contract, making it natively crosschain. Cross-chain transfers with registered counterparts burn the tokens on the source chain and mint them on the destination chain.', + crossChainLinkAllowOverride: crossChainLinkAllowOverrideDescription, }; export const solidityStablecoinDescriptions = { @@ -99,4 +108,6 @@ export const solidityGovernorDescriptions = { timelock: 'The type of timelock to use', storage: 'Enable storage of proposal details and enumerability of proposals', settings: 'Allow governance to update voting settings (delay, period, proposal threshold)', + crossChainExecution: + 'Whether passed proposals can relay execution to other chains through ERC-7786 gateways. Requires a CrosschainRemoteExecutor contract, controlled by this governor, deployed on each target chain. The gateway and executor are chosen per proposal as arguments to the relayCrosschain function.', }; diff --git a/packages/common/src/ai/schemas/solidity.ts b/packages/common/src/ai/schemas/solidity.ts index 31571be0d..5bfd98b76 100644 --- a/packages/common/src/ai/schemas/solidity.ts +++ b/packages/common/src/ai/schemas/solidity.ts @@ -67,6 +67,8 @@ export const solidityERC721Schema = { mintable: z.boolean().optional().describe(commonDescriptions.mintable), incremental: z.boolean().optional().describe(solidityERC721Descriptions.incremental), votes: z.literal('blocknumber').or(z.literal('timestamp')).optional().describe(solidityERC721Descriptions.votes), + crossChainBridging: z.literal('erc7786native').optional().describe(solidityERC721Descriptions.crossChainBridging), + crossChainLinkAllowOverride: z.boolean().optional().describe(solidityERC721Descriptions.crossChainLinkAllowOverride), ...solidityCommonSchema, namespacePrefix: z.string().optional().describe(solidityCommonDescriptions.namespacePrefix), } as const satisfies z.ZodRawShape; @@ -79,6 +81,8 @@ export const solidityERC1155Schema = { mintable: z.boolean().optional().describe(commonDescriptions.mintable), supply: z.boolean().optional().describe(solidityERC1155Descriptions.supply), updatableUri: z.boolean().optional().describe(solidityERC1155Descriptions.updatableUri), + crossChainBridging: z.literal('erc7786native').optional().describe(solidityERC1155Descriptions.crossChainBridging), + crossChainLinkAllowOverride: z.boolean().optional().describe(solidityERC1155Descriptions.crossChainLinkAllowOverride), ...solidityCommonSchema, } as const satisfies z.ZodRawShape; @@ -157,6 +161,7 @@ export const solidityGovernorSchema = { quorumAbsolute: z.string().optional().describe(solidityGovernorDescriptions.quorumAbsolute), storage: z.boolean().optional().describe(solidityGovernorDescriptions.storage), settings: z.boolean().optional().describe(solidityGovernorDescriptions.settings), + crossChainExecution: z.boolean().optional().describe(solidityGovernorDescriptions.crossChainExecution), upgradeable: solidityCommonSchema.upgradeable, info: solidityCommonSchema.info, } as const satisfies z.ZodRawShape; diff --git a/packages/core/confidential/src/erc7984.test.ts.md b/packages/core/confidential/src/erc7984.test.ts.md index 111f8d5e1..3fb3b43a8 100644 --- a/packages/core/confidential/src/erc7984.test.ts.md +++ b/packages/core/confidential/src/erc7984.test.ts.md @@ -43,7 +43,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -120,7 +120,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -146,7 +146,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -168,7 +168,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -190,7 +190,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -212,7 +212,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -253,7 +253,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -316,7 +316,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -388,7 +388,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -463,7 +463,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ diff --git a/packages/core/confidential/src/erc7984.test.ts.snap b/packages/core/confidential/src/erc7984.test.ts.snap index 728e52980..b6266de4b 100644 Binary files a/packages/core/confidential/src/erc7984.test.ts.snap and b/packages/core/confidential/src/erc7984.test.ts.snap differ diff --git a/packages/core/confidential/src/get-versioned-remappings.test.ts.md b/packages/core/confidential/src/get-versioned-remappings.test.ts.md index 96d73bc6e..9a60a3248 100644 --- a/packages/core/confidential/src/get-versioned-remappings.test.ts.md +++ b/packages/core/confidential/src/get-versioned-remappings.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ - '@openzeppelin/contracts/=@openzeppelin/contracts@5.6.0/', + '@openzeppelin/contracts/=@openzeppelin/contracts@5.7.0/', '@openzeppelin/confidential-contracts/=@openzeppelin/confidential-contracts@0.3.1/', '@fhevm/solidity/=@fhevm/solidity@0.9.1/', ] diff --git a/packages/core/confidential/src/get-versioned-remappings.test.ts.snap b/packages/core/confidential/src/get-versioned-remappings.test.ts.snap index f335d715b..43f2b0170 100644 Binary files a/packages/core/confidential/src/get-versioned-remappings.test.ts.snap and b/packages/core/confidential/src/get-versioned-remappings.test.ts.snap differ diff --git a/packages/core/confidential/src/zip-hardhat.test.ts.md b/packages/core/confidential/src/zip-hardhat.test.ts.md index 7b4a8a832..3e3ec6c8b 100644 --- a/packages/core/confidential/src/zip-hardhat.test.ts.md +++ b/packages/core/confidential/src/zip-hardhat.test.ts.md @@ -90,7 +90,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: AGPL-3.0-only␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Confidential Contracts ^0.3.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Confidential Contracts ^0.3.1␊ pragma solidity ^0.8.27;␊ ␊ import {ZamaEthereumConfig} from "@fhevm/solidity/config/ZamaConfig.sol";␊ @@ -224,14 +224,14 @@ Generated by [AVA](https://avajs.dev). it("Test contract", async function () {␊ const ContractFactory = await ethers.getContractFactory("MyToken");␊ ␊ - // TODO: Set the following constructor argument␊ - // const underlying = ...;␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + const underlying = ...;␊ const defaultAdmin = (await ethers.getSigners())[1].address;␊ const handleViewer = (await ethers.getSigners())[2].address;␊ - ␊ - // TODO: Uncomment the below when the missing constructor arguments are set above␊ - // const instance = await ContractFactory.deploy(underlying, defaultAdmin, handleViewer);␊ - // await instance.waitForDeployment();␊ + const instance = await ContractFactory.deploy(underlying, defaultAdmin, handleViewer);␊ + await instance.waitForDeployment();␊ + */␊ });␊ });␊ `, diff --git a/packages/core/confidential/src/zip-hardhat.test.ts.snap b/packages/core/confidential/src/zip-hardhat.test.ts.snap index e36938277..e6a830cfd 100644 Binary files a/packages/core/confidential/src/zip-hardhat.test.ts.snap and b/packages/core/confidential/src/zip-hardhat.test.ts.snap differ diff --git a/packages/core/solidity/package.json b/packages/core/solidity/package.json index 1655d4ad9..a6d524a93 100644 --- a/packages/core/solidity/package.json +++ b/packages/core/solidity/package.json @@ -28,8 +28,8 @@ }, "devDependencies": { "@openzeppelin/community-contracts": "git+https://github.com/OpenZeppelin/openzeppelin-community-contracts.git#b0ddd27", - "@openzeppelin/contracts": "^5.6.0", - "@openzeppelin/contracts-upgradeable": "^5.6.0", + "@openzeppelin/contracts": "^5.7.0", + "@openzeppelin/contracts-upgradeable": "^5.7.0", "@types/node": "^20.0.0", "@types/semver": "^7.5.7", "ava": "^6.0.0", diff --git a/packages/core/solidity/src/account.test.ts.md b/packages/core/solidity/src/account.test.ts.md index e6a91f134..a31aa7b6a 100644 --- a/packages/core/solidity/src/account.test.ts.md +++ b/packages/core/solidity/src/account.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -36,7 +36,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -69,7 +69,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -96,7 +96,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -124,7 +124,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -152,7 +152,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -181,7 +181,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -218,12 +218,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ ␊ @@ -264,13 +264,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ ␊ contract MyAccount is Account, IERC1271, AccountERC7579 {␊ constructor(uint256 moduleTypeId, address module, bytes calldata initData) {␊ @@ -304,12 +304,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ ␊ @@ -350,13 +350,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ ␊ @@ -397,7 +397,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -435,7 +435,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -481,7 +481,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -519,7 +519,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -558,7 +558,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -597,7 +597,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -637,7 +637,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -685,12 +685,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -747,13 +747,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ ␊ @@ -805,12 +805,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -867,13 +867,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -930,7 +930,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -961,7 +961,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1000,7 +1000,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1031,7 +1031,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1063,7 +1063,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1095,7 +1095,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1128,7 +1128,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1169,12 +1169,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ @@ -1224,13 +1224,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ ␊ contract MyAccount is Initializable, Account, IERC1271, AccountERC7579Upgradeable {␊ @@ -1275,12 +1275,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ @@ -1330,13 +1330,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {ERC7739} from "@openzeppelin/contracts/utils/cryptography/signers/draft-ERC7739.sol";␊ @@ -1386,7 +1386,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1407,7 +1407,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1433,7 +1433,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1454,7 +1454,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1476,7 +1476,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1498,7 +1498,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1521,7 +1521,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1549,12 +1549,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerECDSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerECDSA.sol";␊ @@ -1605,13 +1605,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerECDSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerECDSA.sol";␊ ␊ @@ -1657,12 +1657,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerECDSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerECDSA.sol";␊ @@ -1713,13 +1713,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerECDSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerECDSA.sol";␊ @@ -1770,7 +1770,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1803,7 +1803,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1844,7 +1844,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1877,7 +1877,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1911,7 +1911,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1945,7 +1945,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1982,7 +1982,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2025,13 +2025,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -2097,14 +2097,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -2165,13 +2165,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -2237,14 +2237,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -2310,7 +2310,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2336,7 +2336,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2370,7 +2370,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2396,7 +2396,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2423,7 +2423,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2450,7 +2450,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2480,7 +2480,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -2516,13 +2516,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -2581,14 +2581,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -2642,13 +2642,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -2707,14 +2707,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -2773,7 +2773,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2791,7 +2791,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2815,7 +2815,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2833,7 +2833,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2852,7 +2852,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2871,7 +2871,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2893,7 +2893,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -2921,12 +2921,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerEIP7702} from "@openzeppelin/contracts/utils/cryptography/signers/SignerEIP7702.sol";␊ @@ -2977,13 +2977,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerEIP7702} from "@openzeppelin/contracts/utils/cryptography/signers/SignerEIP7702.sol";␊ ␊ @@ -3027,12 +3027,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerEIP7702} from "@openzeppelin/contracts/utils/cryptography/signers/SignerEIP7702.sol";␊ @@ -3083,13 +3083,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerEIP7702} from "@openzeppelin/contracts/utils/cryptography/signers/SignerEIP7702.sol";␊ @@ -3140,7 +3140,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3173,7 +3173,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3213,7 +3213,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3246,7 +3246,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3280,7 +3280,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3314,7 +3314,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3349,7 +3349,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -3392,12 +3392,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -3463,13 +3463,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ ␊ @@ -3529,12 +3529,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -3600,13 +3600,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -3672,7 +3672,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3720,7 +3720,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3776,7 +3776,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3824,7 +3824,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3873,7 +3873,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3922,7 +3922,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -3974,7 +3974,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4032,13 +4032,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -4119,14 +4119,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -4202,13 +4202,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -4289,14 +4289,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -4377,7 +4377,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4418,7 +4418,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4467,7 +4467,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4508,7 +4508,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4550,7 +4550,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4592,7 +4592,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4637,7 +4637,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ @@ -4688,13 +4688,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -4768,14 +4768,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -4844,13 +4844,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -4924,14 +4924,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -5005,7 +5005,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5045,7 +5045,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5092,7 +5092,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5132,7 +5132,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5173,7 +5173,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5214,7 +5214,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5256,7 +5256,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -5306,12 +5306,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -5385,13 +5385,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ import {MultiSignerERC7913Weighted} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913Weighted.sol";␊ @@ -5459,12 +5459,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -5538,13 +5538,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {MultiSignerERC7913} from "@openzeppelin/contracts/utils/cryptography/signers/MultiSignerERC7913.sol";␊ @@ -5618,7 +5618,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5673,7 +5673,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5736,7 +5736,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5793,7 +5793,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5851,7 +5851,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5909,7 +5909,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -5968,7 +5968,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6033,14 +6033,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -6128,7 +6128,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ @@ -6136,7 +6136,7 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -6219,14 +6219,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -6314,7 +6314,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ @@ -6322,7 +6322,7 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -6410,7 +6410,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6458,7 +6458,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6514,7 +6514,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6564,7 +6564,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6615,7 +6615,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6666,7 +6666,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6718,7 +6718,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ @@ -6776,14 +6776,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -6864,7 +6864,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ @@ -6872,7 +6872,7 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -6948,14 +6948,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -7036,7 +7036,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ @@ -7044,7 +7044,7 @@ Generated by [AVA](https://avajs.dev). import {MultiSignerERC7913Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913Upgradeable.sol";␊ import {MultiSignerERC7913WeightedUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/MultiSignerERC7913WeightedUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -7125,7 +7125,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7146,7 +7146,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7172,7 +7172,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7193,7 +7193,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7215,7 +7215,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7237,7 +7237,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7260,7 +7260,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -7291,12 +7291,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -7350,13 +7350,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ ␊ @@ -7402,12 +7402,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -7461,13 +7461,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -7521,7 +7521,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7554,7 +7554,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7595,7 +7595,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7628,7 +7628,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7662,7 +7662,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7696,7 +7696,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7733,7 +7733,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -7776,13 +7776,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -7848,14 +7848,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -7916,13 +7916,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -7988,14 +7988,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -8061,7 +8061,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8087,7 +8087,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8121,7 +8121,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8147,7 +8147,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8174,7 +8174,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8201,7 +8201,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8231,7 +8231,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -8267,13 +8267,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -8332,14 +8332,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -8393,13 +8393,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -8458,14 +8458,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -8524,7 +8524,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8545,7 +8545,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8571,7 +8571,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8592,7 +8592,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8614,7 +8614,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8636,7 +8636,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8659,7 +8659,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -8690,12 +8690,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ @@ -8749,13 +8749,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ ␊ @@ -8801,12 +8801,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ @@ -8860,13 +8860,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerRSA} from "@openzeppelin/contracts/utils/cryptography/signers/SignerRSA.sol";␊ @@ -8920,7 +8920,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -8953,7 +8953,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -8994,7 +8994,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9027,7 +9027,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9061,7 +9061,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9095,7 +9095,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9132,7 +9132,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9175,13 +9175,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -9247,14 +9247,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -9315,13 +9315,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -9387,14 +9387,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -9460,7 +9460,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9486,7 +9486,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9520,7 +9520,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9546,7 +9546,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9573,7 +9573,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9600,7 +9600,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9630,7 +9630,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ @@ -9666,13 +9666,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -9731,14 +9731,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -9792,13 +9792,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -9857,14 +9857,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerRSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerRSAUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -9923,7 +9923,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -9957,7 +9957,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -9996,7 +9996,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -10030,7 +10030,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -10065,7 +10065,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -10100,7 +10100,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -10136,7 +10136,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -10180,12 +10180,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -10240,13 +10240,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ import {SignerWebAuthn} from "@openzeppelin/contracts/utils/cryptography/signers/SignerWebAuthn.sol";␊ @@ -10293,12 +10293,12 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -10353,13 +10353,13 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {AccountERC7579} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579.sol";␊ import {AccountERC7579Hooked} from "@openzeppelin/contracts/account/extensions/draft-AccountERC7579Hooked.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ import {SignerP256} from "@openzeppelin/contracts/utils/cryptography/signers/SignerP256.sol";␊ @@ -10414,7 +10414,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10461,7 +10461,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10516,7 +10516,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10563,7 +10563,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10611,7 +10611,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10659,7 +10659,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10710,7 +10710,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -10767,14 +10767,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -10841,7 +10841,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ @@ -10849,7 +10849,7 @@ Generated by [AVA](https://avajs.dev). import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -10911,14 +10911,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -10985,7 +10985,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ @@ -10993,7 +10993,7 @@ Generated by [AVA](https://avajs.dev). import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ @@ -11060,7 +11060,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11100,7 +11100,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11148,7 +11148,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11188,7 +11188,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11229,7 +11229,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11270,7 +11270,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11314,7 +11314,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ @@ -11364,14 +11364,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -11431,7 +11431,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ @@ -11439,7 +11439,7 @@ Generated by [AVA](https://avajs.dev). import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ ␊ @@ -11494,14 +11494,14 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579Upgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579Upgradeable.sol";␊ import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ @@ -11561,7 +11561,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccountERC7579HookedUpgradeable} from "@openzeppelin/contracts-upgradeable/account/extensions/draft-AccountERC7579HookedUpgradeable.sol";␊ @@ -11569,7 +11569,7 @@ Generated by [AVA](https://avajs.dev). import {SignerP256Upgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerP256Upgradeable.sol";␊ import {SignerWebAuthnUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerWebAuthnUpgradeable.sol";␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ - import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/draft-IERC4337.sol";␊ + import {PackedUserOperation} from "@openzeppelin/contracts/interfaces/IERC4337.sol";␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ import {AbstractSigner} from "@openzeppelin/contracts/utils/cryptography/signers/AbstractSigner.sol";␊ diff --git a/packages/core/solidity/src/account.test.ts.snap b/packages/core/solidity/src/account.test.ts.snap index 7371e5781..e6e7ac969 100644 Binary files a/packages/core/solidity/src/account.test.ts.snap and b/packages/core/solidity/src/account.test.ts.snap differ diff --git a/packages/core/solidity/src/account.ts b/packages/core/solidity/src/account.ts index 95d191b6c..5e44d9fe6 100644 --- a/packages/core/solidity/src/account.ts +++ b/packages/core/solidity/src/account.ts @@ -67,7 +67,7 @@ export function buildAccount(opts: AccountOptions): Contract { if (opts.ERC7579Modules) { c.addImportOnly({ name: 'PackedUserOperation', - path: '@openzeppelin/contracts/interfaces/draft-IERC4337.sol', + path: '@openzeppelin/contracts/interfaces/IERC4337.sol', transpiled: false, // PackedUserOperation doesn't start with "I" so its not recognized as an "interface object" }); } @@ -247,7 +247,7 @@ function overrideRawSignatureValidation(c: ContractBuilder, opts: AccountOptions const signerBaseName = signers[opts.signer].name; const signerName = opts.upgradeable ? upgradeableName(signerBaseName) : signerBaseName; - // WebAuthnSigner depends inherits from P256Signer, so the AbstractSigner override is handled by `addSigner` + // WebAuthnSigner inherits from P256Signer, so the AbstractSigner override is handled by `addSigner` if (opts.signer !== 'WebAuthn') { c.addImportOnly({ name: 'AbstractSigner', diff --git a/packages/core/solidity/src/custom.test.ts.md b/packages/core/solidity/src/custom.test.ts.md index 0219cca07..68a324b07 100644 --- a/packages/core/solidity/src/custom.test.ts.md +++ b/packages/core/solidity/src/custom.test.ts.md @@ -33,7 +33,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -57,7 +57,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ @@ -75,7 +75,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -117,7 +117,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -132,7 +132,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -149,7 +149,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -164,7 +164,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ diff --git a/packages/core/solidity/src/custom.test.ts.snap b/packages/core/solidity/src/custom.test.ts.snap index e2a61edf5..433a4d0ea 100644 Binary files a/packages/core/solidity/src/custom.test.ts.snap and b/packages/core/solidity/src/custom.test.ts.snap differ diff --git a/packages/core/solidity/src/environments/hardhat/package-lock.json b/packages/core/solidity/src/environments/hardhat/package-lock.json index 265ee6d8f..22dc3cd9c 100644 --- a/packages/core/solidity/src/environments/hardhat/package-lock.json +++ b/packages/core/solidity/src/environments/hardhat/package-lock.json @@ -12,7 +12,7 @@ "@nomicfoundation/hardhat-ethers": "^4.0.2", "@nomicfoundation/hardhat-ignition": "^3.0.0", "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0", - "@openzeppelin/contracts": "^5.6.0", + "@openzeppelin/contracts": "^5.7.0", "ava": "^6.0.0", "ethers": "^6.8.1", "hardhat": "^3.6.0", @@ -1387,9 +1387,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.6.1.tgz", - "integrity": "sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-IL2AZpI+7THMzt1u6Cxmc1zLwVnudtUGvrqXQ/HnbLKfQ/8dIWMMQPDwPIjRQzNrlAo4cxZaCGRB/XvwPo9ILA==", "dev": true, "license": "MIT" }, diff --git a/packages/core/solidity/src/environments/hardhat/package.json b/packages/core/solidity/src/environments/hardhat/package.json index fe1acb428..0a857a560 100644 --- a/packages/core/solidity/src/environments/hardhat/package.json +++ b/packages/core/solidity/src/environments/hardhat/package.json @@ -14,7 +14,7 @@ "@nomicfoundation/hardhat-ethers": "^4.0.2", "@nomicfoundation/hardhat-ignition": "^3.0.0", "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0", - "@openzeppelin/contracts": "^5.6.0", + "@openzeppelin/contracts": "^5.7.0", "ava": "^6.0.0", "ethers": "^6.8.1", "hardhat": "^3.6.0", diff --git a/packages/core/solidity/src/environments/hardhat/upgradeable/package-lock.json b/packages/core/solidity/src/environments/hardhat/upgradeable/package-lock.json index c1433e45f..e0020af20 100644 --- a/packages/core/solidity/src/environments/hardhat/upgradeable/package-lock.json +++ b/packages/core/solidity/src/environments/hardhat/upgradeable/package-lock.json @@ -10,8 +10,8 @@ "license": "ISC", "devDependencies": { "@nomicfoundation/hardhat-ethers": "^4.0.2", - "@openzeppelin/contracts": "^5.6.0", - "@openzeppelin/contracts-upgradeable": "^5.6.0", + "@openzeppelin/contracts": "^5.7.0", + "@openzeppelin/contracts-upgradeable": "^5.7.0", "@openzeppelin/hardhat-upgrades": "^4.0.2", "ava": "^6.0.0", "ethers": "^6.8.1", @@ -1274,20 +1274,20 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.6.1.tgz", - "integrity": "sha512-Ly6SlsVJ3mj+b18W3R8gNufB7dTICT105fJhodGAGgyC2oqnBAhqSiNDJ8V8DLY05cCz81GLI0CU5vNYA1EC/w==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-IL2AZpI+7THMzt1u6Cxmc1zLwVnudtUGvrqXQ/HnbLKfQ/8dIWMMQPDwPIjRQzNrlAo4cxZaCGRB/XvwPo9ILA==", "dev": true, "license": "MIT" }, "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.6.1.tgz", - "integrity": "sha512-n4a/vfRs114lXyUdYg7pyY8LvFKWvCDF5lEcRRAVxap8g6ZEdLqm+9tmt2zTtRHcNMxTYp9y5t6KBof4tHp7Og==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.7.0.tgz", + "integrity": "sha512-dHA/P3AFsnNXcv82Kge/v35kK0ByNe1EFv4vvOnl//lc8svwRcj5i/bdXd5mdMolD4rjSKy6EWOwc6+7h1gjaQ==", "dev": true, "license": "MIT", "peerDependencies": { - "@openzeppelin/contracts": "5.6.1" + "@openzeppelin/contracts": "5.7.0" } }, "node_modules/@openzeppelin/defender-sdk-base-client": { diff --git a/packages/core/solidity/src/environments/hardhat/upgradeable/package.json b/packages/core/solidity/src/environments/hardhat/upgradeable/package.json index e02ab8c83..7cc23c612 100644 --- a/packages/core/solidity/src/environments/hardhat/upgradeable/package.json +++ b/packages/core/solidity/src/environments/hardhat/upgradeable/package.json @@ -12,8 +12,8 @@ "license": "ISC", "devDependencies": { "@nomicfoundation/hardhat-ethers": "^4.0.2", - "@openzeppelin/contracts": "^5.6.0", - "@openzeppelin/contracts-upgradeable": "^5.6.0", + "@openzeppelin/contracts": "^5.7.0", + "@openzeppelin/contracts-upgradeable": "^5.7.0", "@openzeppelin/hardhat-upgrades": "^4.0.2", "ava": "^6.0.0", "ethers": "^6.8.1", diff --git a/packages/core/solidity/src/erc1155.test.ts b/packages/core/solidity/src/erc1155.test.ts index 5c818868b..dc4d91014 100644 --- a/packages/core/solidity/src/erc1155.test.ts +++ b/packages/core/solidity/src/erc1155.test.ts @@ -100,6 +100,48 @@ testERC1155('full upgradeable transparent with managed', { upgradeable: 'uups', }); +testERC1155('erc1155 crossChainBridging erc7786native', { + crossChainBridging: 'erc7786native', +}); + +testERC1155('erc1155 crossChainBridging erc7786native allowOverride', { + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: true, +}); + +testERC1155('erc1155 crossChainBridging erc7786native ownable', { + crossChainBridging: 'erc7786native', + access: 'ownable', +}); + +testERC1155('erc1155 crossChainBridging erc7786native ownable mintable burnable', { + crossChainBridging: 'erc7786native', + access: 'ownable', + mintable: true, + burnable: true, +}); + +testERC1155('erc1155 crossChainBridging erc7786native roles', { + crossChainBridging: 'erc7786native', + access: 'roles', +}); + +testERC1155('erc1155 crossChainBridging erc7786native managed', { + crossChainBridging: 'erc7786native', + access: 'managed', +}); + +testERC1155('erc1155 crossChainBridging erc7786native pausable supply', { + crossChainBridging: 'erc7786native', + pausable: true, + supply: true, +}); + +testERC1155('erc1155 crossChainBridging erc7786native upgradeable', { + crossChainBridging: 'erc7786native', + upgradeable: 'transparent', +}); + testAPIEquivalence('API default'); testAPIEquivalence('API basic', { @@ -133,5 +175,12 @@ test('API isAccessControlRequired', async t => { ); t.is(erc1155.isAccessControlRequired({ updatableUri: true }), true); t.is(erc1155.isAccessControlRequired({ updatableUri: false }), false); + t.is( + erc1155.isAccessControlRequired({ + updatableUri: false, + crossChainBridging: 'erc7786native', + }), + true, + ); t.is(erc1155.isAccessControlRequired({}), true); // updatableUri is true by default }); diff --git a/packages/core/solidity/src/erc1155.test.ts.md b/packages/core/solidity/src/erc1155.test.ts.md index ea07f9400..5cba933bc 100644 --- a/packages/core/solidity/src/erc1155.test.ts.md +++ b/packages/core/solidity/src/erc1155.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -32,7 +32,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -55,7 +55,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -92,7 +92,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -115,7 +115,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -132,7 +132,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -156,7 +156,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -197,7 +197,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -234,7 +234,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -287,7 +287,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -324,7 +324,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -357,7 +357,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -441,7 +441,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -534,7 +534,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ @@ -599,3 +599,306 @@ Generated by [AVA](https://avajs.dev). }␊ }␊ ` + +## erc1155 crossChainBridging erc7786native + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native allowOverride + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, true);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native ownable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native ownable mintable burnable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Burnable} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, Ownable, ERC1155Burnable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + ␊ + function mint(address account, uint256 id, uint256 amount, bytes memory data)␊ + public␊ + onlyOwner␊ + {␊ + _mint(account, id, amount, data);␊ + }␊ + ␊ + function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)␊ + public␊ + onlyOwner␊ + {␊ + _mintBatch(to, ids, amounts, data);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native roles + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, AccessControl {␊ + bytes32 public constant CROSSCHAIN_LINKER_ROLE = keccak256("CROSSCHAIN_LINKER_ROLE");␊ + bytes32 public constant URI_SETTER_ROLE = keccak256("URI_SETTER_ROLE");␊ + ␊ + constructor(CrosschainLinked.Link[] memory links, address defaultAdmin, address crosschainLinker)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + {␊ + _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊ + _grantRole(CROSSCHAIN_LINKER_ROLE, crosschainLinker);␊ + }␊ + ␊ + function setLink(address gateway, bytes memory counterpart)␊ + public␊ + onlyRole(CROSSCHAIN_LINKER_ROLE)␊ + {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyRole(URI_SETTER_ROLE) {␊ + _setURI(newuri);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function supportsInterface(bytes4 interfaceId)␊ + public␊ + view␊ + override(ERC1155, AccessControl)␊ + returns (bool)␊ + {␊ + return super.supportsInterface(interfaceId);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native managed + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, AccessManaged {␊ + constructor(CrosschainLinked.Link[] memory links, address initialAuthority)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + AccessManaged(initialAuthority)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public restricted {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public restricted {␊ + _setURI(newuri);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native pausable supply + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ + import {ERC1155Crosschain} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol";␊ + import {ERC1155Pausable} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Pausable.sol";␊ + import {ERC1155Supply} from "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";␊ + ␊ + contract MyToken is ERC1155, ERC1155Crosschain, Ownable, ERC1155Pausable, ERC1155Supply {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC1155("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + ␊ + function pause() public onlyOwner {␊ + _pause();␊ + }␊ + ␊ + function unpause() public onlyOwner {␊ + _unpause();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _update(address from, address to, uint256[] memory ids, uint256[] memory values)␊ + internal␊ + override(ERC1155, ERC1155Pausable, ERC1155Supply)␊ + {␊ + super._update(from, to, ids, values);␊ + }␊ + }␊ + ` + +## erc1155 crossChainBridging erc7786native upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ + import {CrosschainLinkedUpgradeable} from "@openzeppelin/contracts-upgradeable/crosschain/CrosschainLinkedUpgradeable.sol";␊ + import {ERC1155Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol";␊ + import {ERC1155CrosschainUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155CrosschainUpgradeable.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + ␊ + contract MyToken is Initializable, ERC1155Upgradeable, ERC1155CrosschainUpgradeable, OwnableUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(CrosschainLinkedUpgradeable.Link[] memory links, address initialOwner)␊ + public␊ + initializer␊ + {␊ + __ERC1155_init("https://gateway.pinata.cloud/ipfs/QmcP9hxrnC1T5ATPmq2saFeAM1ypFX9BnAswCdHB9JCjLA/");␊ + __ERC1155Crosschain_init();␊ + __CrosschainLinked_init(links);␊ + __Ownable_init(initialOwner);␊ + }␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function setURI(string memory newuri) public onlyOwner {␊ + _setURI(newuri);␊ + }␊ + }␊ + ` diff --git a/packages/core/solidity/src/erc1155.test.ts.snap b/packages/core/solidity/src/erc1155.test.ts.snap index 407c11acb..ab459754a 100644 Binary files a/packages/core/solidity/src/erc1155.test.ts.snap and b/packages/core/solidity/src/erc1155.test.ts.snap differ diff --git a/packages/core/solidity/src/erc1155.ts b/packages/core/solidity/src/erc1155.ts index b940417b3..e6af761c3 100644 --- a/packages/core/solidity/src/erc1155.ts +++ b/packages/core/solidity/src/erc1155.ts @@ -10,6 +10,10 @@ import { withCommonDefaults, defaults as commonDefaults } from './common-options import { setUpgradeable } from './set-upgradeable'; import { setInfo } from './set-info'; import { printContract } from './print'; +import { addCrosschainLinked } from './set-crosschain-linked'; + +export const crossChainBridgingOptions = [false, 'erc7786native'] as const; +export type CrossChainBridging = (typeof crossChainBridgingOptions)[number]; export interface ERC1155Options extends CommonOptions { name: string; @@ -19,6 +23,8 @@ export interface ERC1155Options extends CommonOptions { mintable?: boolean; supply?: boolean; updatableUri?: boolean; + crossChainBridging?: CrossChainBridging; + crossChainLinkAllowOverride?: boolean; } export const defaults: Required = { @@ -30,6 +36,8 @@ export const defaults: Required = { mintable: false, supply: false, updatableUri: true, + crossChainBridging: false, + crossChainLinkAllowOverride: false, } as const; function withDefaults(opts: ERC1155Options): Required { @@ -41,6 +49,8 @@ function withDefaults(opts: ERC1155Options): Required { mintable: opts.mintable ?? defaults.mintable, supply: opts.supply ?? defaults.supply, updatableUri: opts.updatableUri ?? defaults.updatableUri, + crossChainBridging: opts.crossChainBridging ?? defaults.crossChainBridging, + crossChainLinkAllowOverride: opts.crossChainLinkAllowOverride ?? defaults.crossChainLinkAllowOverride, }; } @@ -49,7 +59,13 @@ export function printERC1155(opts: ERC1155Options = defaults): string { } export function isAccessControlRequired(opts: Partial): boolean { - return opts.mintable || opts.pausable || opts.updatableUri !== false || opts.upgradeable === 'uups'; + return ( + opts.mintable || + opts.pausable || + opts.updatableUri !== false || + opts.upgradeable === 'uups' || + opts.crossChainBridging === 'erc7786native' + ); } export function buildERC1155(opts: ERC1155Options): Contract { @@ -61,6 +77,10 @@ export function buildERC1155(opts: ERC1155Options): Contract { addBase(c, allOpts.uri); + if (allOpts.crossChainBridging) { + addCrossChainBridging(c, allOpts.crossChainBridging, allOpts.crossChainLinkAllowOverride, access); + } + if (allOpts.updatableUri) { addSetUri(c, access); } @@ -124,6 +144,35 @@ function addMintable(c: ContractBuilder, access: Access) { c.addFunctionCode('_mintBatch(to, ids, amounts, data);', functions.mintBatch); } +function addCrossChainBridging( + c: ContractBuilder, + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: boolean, + access: Access, +) { + switch (crossChainBridging) { + case 'erc7786native': + addERC1155Crosschain(c, crossChainLinkAllowOverride, access); + break; + default: { + const _: never = crossChainBridging; + throw new Error('Unknown value for `crossChainBridging`'); + } + } +} + +function addERC1155Crosschain(c: ContractBuilder, crossChainLinkAllowOverride: boolean, access: Access) { + addCrosschainLinked( + c, + { + name: 'ERC1155Crosschain', + path: '@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Crosschain.sol', + }, + crossChainLinkAllowOverride, + access, + ); +} + function addSetUri(c: ContractBuilder, access: Access) { requireAccessControl(c, functions.setURI, access, 'URI_SETTER', undefined); c.addFunctionCode('_setURI(newuri);', functions.setURI); diff --git a/packages/core/solidity/src/erc20.test.ts.md b/packages/core/solidity/src/erc20.test.ts.md index 3f7986cdd..7eeaf20ab 100644 --- a/packages/core/solidity/src/erc20.test.ts.md +++ b/packages/core/solidity/src/erc20.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -25,7 +25,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -41,7 +41,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -58,7 +58,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -97,7 +97,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -140,7 +140,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -179,7 +179,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -219,7 +219,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -240,7 +240,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -256,7 +256,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -276,7 +276,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -292,7 +292,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -317,7 +317,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -337,7 +337,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -358,7 +358,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -379,7 +379,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -400,7 +400,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -425,7 +425,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -454,7 +454,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -471,7 +471,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -487,7 +487,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -523,7 +523,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -550,7 +550,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -586,7 +586,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -631,7 +631,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -648,7 +648,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -685,7 +685,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -722,7 +722,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -764,7 +764,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -806,7 +806,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -836,7 +836,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -864,7 +864,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -892,7 +892,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -920,7 +920,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -953,7 +953,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -988,7 +988,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -1016,7 +1016,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -1032,7 +1032,7 @@ Generated by [AVA](https://avajs.dev). _disableInitializers();␊ }␊ ␊ - function initialize(CrosschainLinked.Link[] memory links, address initialOwner)␊ + function initialize(CrosschainLinkedUpgradeable.Link[] memory links, address initialOwner)␊ public␊ initializer␊ {␊ @@ -1054,7 +1054,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -1083,7 +1083,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1117,7 +1117,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -1163,7 +1163,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -1197,7 +1197,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -1258,7 +1258,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";␊ @@ -1297,7 +1297,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -1318,7 +1318,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1358,7 +1358,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -1394,7 +1394,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -1502,7 +1502,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -1590,7 +1590,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -1687,7 +1687,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ diff --git a/packages/core/solidity/src/erc20.test.ts.snap b/packages/core/solidity/src/erc20.test.ts.snap index aa2e72acb..6692c9d87 100644 Binary files a/packages/core/solidity/src/erc20.test.ts.snap and b/packages/core/solidity/src/erc20.test.ts.snap differ diff --git a/packages/core/solidity/src/erc20.ts b/packages/core/solidity/src/erc20.ts index a05bc8c71..0e3055dbb 100644 --- a/packages/core/solidity/src/erc20.ts +++ b/packages/core/solidity/src/erc20.ts @@ -15,6 +15,7 @@ import { supportsInterface } from './common-functions'; import { OptionsError } from './error'; import { toUint, UINT256_MAX } from './utils/convert-strings'; import { setNamespacedStorage, toStorageStructInstantiation } from './set-namespaced-storage'; +import { addCrosschainLinked } from './set-crosschain-linked'; export const crossChainBridgingOptions = [false, 'custom', 'erc7786native', 'superchain'] as const; export type CrossChainBridging = (typeof crossChainBridgingOptions)[number]; @@ -386,22 +387,15 @@ function addCrossChainBridging( } function addERC20Crosschain(c: ContractBuilder, crossChainLinkAllowOverride: boolean, access: Access) { - c.addParent({ - name: 'ERC20Crosschain', - path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Crosschain.sol', - }); - - c.addConstructionOnly( + addCrosschainLinked( + c, { - name: 'CrosschainLinked', - path: '@openzeppelin/contracts/crosschain/CrosschainLinked.sol', + name: 'ERC20Crosschain', + path: '@openzeppelin/contracts/token/ERC20/extensions/ERC20Crosschain.sol', }, - [{ lit: 'links' }], + crossChainLinkAllowOverride, + access, ); - c.addConstructorArgument({ type: 'CrosschainLinked.Link[] memory', name: 'links' }); - - requireAccessControl(c, functions.setLink, access, 'CROSSCHAIN_LINKER', 'crosschainLinker'); - c.addFunctionCode(`_setLink(gateway, counterpart, ${crossChainLinkAllowOverride});`, functions.setLink); } function addERC20Bridgeable( @@ -513,6 +507,7 @@ function addCustomBridging(c: ContractBuilder, access: Access, upgradeable: Upgr c.addImportOnly({ name: 'AuthorityUtils', path: `@openzeppelin/contracts/access/manager/AuthorityUtils.sol`, + transpiled: false, }); c.setFunctionBody( [ @@ -618,12 +613,4 @@ export const functions = defineFunctions({ kind: 'public' as const, args: [{ name: 'tokenBridge_', type: 'address' }], }, - - setLink: { - kind: 'public' as const, - args: [ - { name: 'gateway', type: 'address' }, - { name: 'counterpart', type: 'bytes memory' }, - ], - }, }); diff --git a/packages/core/solidity/src/erc721.test.ts b/packages/core/solidity/src/erc721.test.ts index 102cbdc18..d20f43bb1 100644 --- a/packages/core/solidity/src/erc721.test.ts +++ b/packages/core/solidity/src/erc721.test.ts @@ -181,6 +181,55 @@ testERC721('full upgradeable uups + managed + incremental + empty namespacePrefi namespacePrefix: '', }); +testERC721('erc721 crossChainBridging erc7786native', { + crossChainBridging: 'erc7786native', +}); + +testERC721('erc721 crossChainBridging erc7786native allowOverride', { + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: true, +}); + +testERC721('erc721 crossChainBridging erc7786native ownable', { + crossChainBridging: 'erc7786native', + access: 'ownable', +}); + +testERC721('erc721 crossChainBridging erc7786native ownable mintable burnable', { + crossChainBridging: 'erc7786native', + access: 'ownable', + mintable: true, + burnable: true, +}); + +testERC721('erc721 crossChainBridging erc7786native mintable incremental', { + crossChainBridging: 'erc7786native', + mintable: true, + incremental: true, +}); + +testERC721('erc721 crossChainBridging erc7786native roles', { + crossChainBridging: 'erc7786native', + access: 'roles', +}); + +testERC721('erc721 crossChainBridging erc7786native managed', { + crossChainBridging: 'erc7786native', + access: 'managed', +}); + +testERC721('erc721 crossChainBridging erc7786native pausable votes enumerable', { + crossChainBridging: 'erc7786native', + pausable: true, + votes: true, + enumerable: true, +}); + +testERC721('erc721 crossChainBridging erc7786native upgradeable', { + crossChainBridging: 'erc7786native', + upgradeable: 'transparent', +}); + testAPIEquivalence('API default'); testAPIEquivalence('API basic', { name: 'CustomToken', symbol: 'CTK' }); @@ -205,4 +254,6 @@ test('API isAccessControlRequired', async t => { t.is(erc721.isAccessControlRequired({ pausable: true }), true); t.is(erc721.isAccessControlRequired({ upgradeable: 'uups' }), true); t.is(erc721.isAccessControlRequired({ upgradeable: 'transparent' }), false); + t.is(erc721.isAccessControlRequired({ crossChainBridging: 'erc7786native' }), true); + t.is(erc721.isAccessControlRequired({ crossChainBridging: false }), false); }); diff --git a/packages/core/solidity/src/erc721.test.ts.md b/packages/core/solidity/src/erc721.test.ts.md index 9f016cf1c..a9eb3f753 100644 --- a/packages/core/solidity/src/erc721.test.ts.md +++ b/packages/core/solidity/src/erc721.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -24,7 +24,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -39,7 +39,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -58,7 +58,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -100,7 +100,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -136,7 +136,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -184,7 +184,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -237,7 +237,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -253,7 +253,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -290,7 +290,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -328,7 +328,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -351,7 +351,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -387,7 +387,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -410,7 +410,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -437,7 +437,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -471,7 +471,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -505,7 +505,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ @@ -548,7 +548,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -624,7 +624,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -693,7 +693,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -758,7 +758,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -831,7 +831,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -911,7 +911,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ @@ -991,7 +991,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ @@ -1086,7 +1086,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ @@ -1175,3 +1175,317 @@ Generated by [AVA](https://avajs.dev). }␊ }␊ ` + +## erc721 crossChainBridging erc7786native + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native allowOverride + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, true);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native ownable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native ownable mintable burnable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Burnable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable, ERC721Burnable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function safeMint(address to, uint256 tokenId) public onlyOwner {␊ + _safeMint(to, tokenId);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native mintable incremental + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + uint256 private _nextTokenId;␊ + ␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function safeMint(address to) public onlyOwner returns (uint256) {␊ + uint256 tokenId = _nextTokenId++;␊ + _safeMint(to, tokenId);␊ + return tokenId;␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native roles + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, AccessControl {␊ + bytes32 public constant CROSSCHAIN_LINKER_ROLE = keccak256("CROSSCHAIN_LINKER_ROLE");␊ + ␊ + constructor(CrosschainLinked.Link[] memory links, address defaultAdmin, address crosschainLinker)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + {␊ + _grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);␊ + _grantRole(CROSSCHAIN_LINKER_ROLE, crosschainLinker);␊ + }␊ + ␊ + function setLink(address gateway, bytes memory counterpart)␊ + public␊ + onlyRole(CROSSCHAIN_LINKER_ROLE)␊ + {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function supportsInterface(bytes4 interfaceId)␊ + public␊ + view␊ + override(ERC721, AccessControl)␊ + returns (bool)␊ + {␊ + return super.supportsInterface(interfaceId);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native managed + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, AccessManaged {␊ + constructor(CrosschainLinked.Link[] memory links, address initialAuthority)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + AccessManaged(initialAuthority)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public restricted {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native pausable votes enumerable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + import {ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";␊ + import {ERC721Pausable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol";␊ + import {ERC721Votes} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Votes.sol";␊ + import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable, ERC721Enumerable, ERC721Pausable, EIP712, ERC721Votes {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("MyToken", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + EIP712("MyToken", "1")␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + ␊ + function pause() public onlyOwner {␊ + _pause();␊ + }␊ + ␊ + function unpause() public onlyOwner {␊ + _unpause();␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function _update(address to, uint256 tokenId, address auth)␊ + internal␊ + override(ERC721, ERC721Enumerable, ERC721Pausable, ERC721Votes)␊ + returns (address)␊ + {␊ + return super._update(to, tokenId, auth);␊ + }␊ + ␊ + function _increaseBalance(address account, uint128 value)␊ + internal␊ + override(ERC721, ERC721Enumerable, ERC721Votes)␊ + {␊ + super._increaseBalance(account, value);␊ + }␊ + ␊ + function supportsInterface(bytes4 interfaceId)␊ + public␊ + view␊ + override(ERC721, ERC721Enumerable)␊ + returns (bool)␊ + {␊ + return super.supportsInterface(interfaceId);␊ + }␊ + }␊ + ` + +## erc721 crossChainBridging erc7786native upgradeable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ + import {CrosschainLinkedUpgradeable} from "@openzeppelin/contracts-upgradeable/crosschain/CrosschainLinkedUpgradeable.sol";␊ + import {ERC721Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";␊ + import {ERC721CrosschainUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC721/extensions/ERC721CrosschainUpgradeable.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + ␊ + contract MyToken is Initializable, ERC721Upgradeable, ERC721CrosschainUpgradeable, OwnableUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(CrosschainLinkedUpgradeable.Link[] memory links, address initialOwner)␊ + public␊ + initializer␊ + {␊ + __ERC721_init("MyToken", "MTK");␊ + __ERC721Crosschain_init();␊ + __CrosschainLinked_init(links);␊ + __Ownable_init(initialOwner);␊ + }␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + ` diff --git a/packages/core/solidity/src/erc721.test.ts.snap b/packages/core/solidity/src/erc721.test.ts.snap index 902ad59a7..9668723b5 100644 Binary files a/packages/core/solidity/src/erc721.test.ts.snap and b/packages/core/solidity/src/erc721.test.ts.snap differ diff --git a/packages/core/solidity/src/erc721.ts b/packages/core/solidity/src/erc721.ts index dc5258aff..83668a75c 100644 --- a/packages/core/solidity/src/erc721.ts +++ b/packages/core/solidity/src/erc721.ts @@ -14,6 +14,10 @@ import { printContract } from './print'; import type { ClockMode } from './set-clock-mode'; import { clockModeDefault, setClockMode } from './set-clock-mode'; import { setNamespacedStorage, toStorageStructInstantiation } from './set-namespaced-storage'; +import { addCrosschainLinked } from './set-crosschain-linked'; + +export const crossChainBridgingOptions = [false, 'erc7786native'] as const; +export type CrossChainBridging = (typeof crossChainBridgingOptions)[number]; export interface ERC721Options extends CommonOptions { name: string; @@ -30,6 +34,8 @@ export interface ERC721Options extends CommonOptions { * Setting `true` is equivalent to 'blocknumber'. Setting a clock mode implies voting is enabled. */ votes?: boolean | ClockMode; + crossChainBridging?: CrossChainBridging; + crossChainLinkAllowOverride?: boolean; namespacePrefix?: string; } @@ -45,6 +51,8 @@ export const defaults: Required = { mintable: false, incremental: false, votes: false, + crossChainBridging: false, + crossChainLinkAllowOverride: false, namespacePrefix: 'myProject', } as const; @@ -60,6 +68,8 @@ function withDefaults(opts: ERC721Options): Required { mintable: opts.mintable ?? defaults.mintable, incremental: opts.incremental ?? defaults.incremental, votes: opts.votes ?? defaults.votes, + crossChainBridging: opts.crossChainBridging ?? defaults.crossChainBridging, + crossChainLinkAllowOverride: opts.crossChainLinkAllowOverride ?? defaults.crossChainLinkAllowOverride, namespacePrefix: opts.namespacePrefix ?? defaults.namespacePrefix, }; } @@ -69,7 +79,7 @@ export function printERC721(opts: ERC721Options = defaults): string { } export function isAccessControlRequired(opts: Partial): boolean { - return opts.mintable || opts.pausable || opts.upgradeable === 'uups'; + return opts.mintable || opts.pausable || opts.upgradeable === 'uups' || opts.crossChainBridging === 'erc7786native'; } export function buildERC721(opts: ERC721Options): Contract { @@ -85,6 +95,10 @@ export function buildERC721(opts: ERC721Options): Contract { addBaseURI(c, allOpts.baseUri); } + if (allOpts.crossChainBridging) { + addCrossChainBridging(c, allOpts.crossChainBridging, allOpts.crossChainLinkAllowOverride, access); + } + if (allOpts.enumerable) { addEnumerable(c); } @@ -209,6 +223,35 @@ function addMintable( if (incremental) c.addFunctionCode('return tokenId;', fn); } +function addCrossChainBridging( + c: ContractBuilder, + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: boolean, + access: Access, +) { + switch (crossChainBridging) { + case 'erc7786native': + addERC721Crosschain(c, crossChainLinkAllowOverride, access); + break; + default: { + const _: never = crossChainBridging; + throw new Error('Unknown value for `crossChainBridging`'); + } + } +} + +function addERC721Crosschain(c: ContractBuilder, crossChainLinkAllowOverride: boolean, access: Access) { + addCrosschainLinked( + c, + { + name: 'ERC721Crosschain', + path: '@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol', + }, + crossChainLinkAllowOverride, + access, + ); +} + function addVotes(c: ContractBuilder, name: string, clockMode: ClockMode) { const EIP712 = { name: 'EIP712', diff --git a/packages/core/solidity/src/generate/erc1155.ts b/packages/core/solidity/src/generate/erc1155.ts index fdb9c09fe..9633c6ae0 100644 --- a/packages/core/solidity/src/generate/erc1155.ts +++ b/packages/core/solidity/src/generate/erc1155.ts @@ -1,4 +1,5 @@ import type { ERC1155Options } from '../erc1155'; +import { crossChainBridgingOptions } from '../erc1155'; import { accessOptions } from '../set-access-control'; import { infoOptions } from '../set-info'; import { upgradeableOptions } from '../set-upgradeable'; @@ -14,11 +15,34 @@ const blueprint = { mintable: booleans, supply: booleans, updatableUri: booleans, + crossChainBridging: crossChainBridgingOptions, + crossChainLinkAllowOverride: [false], access: accessOptions, upgradeable: upgradeableOptions, info: infoOptions, }; +// crossChainBridging x upgradeable is excluded from the exhaustive matrix above to limit its size, +// so cross it against a reduced blueprint to still get compile coverage of the transpiled variants. +const crossChainBridgingUpgradeableBlueprint = { + ...blueprint, + burnable: [false], + pausable: [false], + mintable: [false], + supply: [false], + updatableUri: [false], + crossChainBridging: ['erc7786native'] as const, + upgradeable: ['transparent', 'uups'] as const, + info: [{}], +}; + export function* generateERC1155Options(): Generator> { - yield* generateAlternatives(blueprint); + for (const opts of generateAlternatives(blueprint)) { + // crossChainBridging x upgradeable is covered by the reduced blueprint below + if (!(opts.crossChainBridging && opts.upgradeable)) { + yield opts; + } + } + + yield* generateAlternatives(crossChainBridgingUpgradeableBlueprint); } diff --git a/packages/core/solidity/src/generate/erc20.ts b/packages/core/solidity/src/generate/erc20.ts index f8ccb93c3..06e4e6f2a 100644 --- a/packages/core/solidity/src/generate/erc20.ts +++ b/packages/core/solidity/src/generate/erc20.ts @@ -40,19 +40,36 @@ const basicFeatures = { }, }; +// crossChainBridging x upgradeable is excluded from the exhaustive matrix above to limit its size, +// so cross it against a reduced blueprint to still get compile coverage of the transpiled variants +// (including the ERC-7201 namespaced storage used by 'custom' bridging when upgradeable). +const crossChainBridgingUpgradeableBlueprint = { + ...blueprintWithoutBasicFeatures, + ...basicFeatures.OFF, + decimals: ['18'], + pausable: [false], + mintable: [false], + votes: [false] as const, + crossChainBridging: ['custom', 'erc7786native', 'superchain'] as const, + upgradeable: ['transparent', 'uups'] as const, + info: [{}], +}; + export function* generateERC20Options(): Generator> { // Separate generation steps with basic features OFF and ON to avoid having too many combinations for (const opts of generateAlternatives({ ...blueprintWithoutBasicFeatures, ...basicFeatures.OFF })) { - // crossChainBridging does not currently support upgradeable + // crossChainBridging x upgradeable is covered by the reduced blueprint below if (!(opts.crossChainBridging && opts.upgradeable)) { yield opts; } } for (const opts of generateAlternatives({ ...blueprintWithoutBasicFeatures, ...basicFeatures.ON })) { - // crossChainBridging does not currently support upgradeable + // crossChainBridging x upgradeable is covered by the reduced blueprint below if (!(opts.crossChainBridging && opts.upgradeable)) { yield opts; } } + + yield* generateAlternatives(crossChainBridgingUpgradeableBlueprint); } diff --git a/packages/core/solidity/src/generate/erc721.ts b/packages/core/solidity/src/generate/erc721.ts index 13749101c..3bb1a2f03 100644 --- a/packages/core/solidity/src/generate/erc721.ts +++ b/packages/core/solidity/src/generate/erc721.ts @@ -1,4 +1,5 @@ import type { ERC721Options } from '../erc721'; +import { crossChainBridgingOptions } from '../erc721'; import { accessOptions } from '../set-access-control'; import { clockModeOptions } from '../set-clock-mode'; import { infoOptions } from '../set-info'; @@ -17,6 +18,8 @@ const blueprint = { pausable: booleans, mintable: booleans, incremental: booleans, + crossChainBridging: crossChainBridgingOptions, + crossChainLinkAllowOverride: [false], access: accessOptions, upgradeable: upgradeableOptions, namespacePrefix: ['myProject'], @@ -24,6 +27,29 @@ const blueprint = { votes: [...booleans, ...clockModeOptions] as const, }; +// crossChainBridging x upgradeable is excluded from the exhaustive matrix above to limit its size, +// so cross it against a reduced blueprint to still get compile coverage of the transpiled variants. +const crossChainBridgingUpgradeableBlueprint = { + ...blueprint, + enumerable: [false], + uriStorage: [false], + burnable: [false], + pausable: [false], + mintable: [false], + incremental: [false], + votes: [false] as const, + crossChainBridging: ['erc7786native'] as const, + upgradeable: ['transparent', 'uups'] as const, + info: [{}], +}; + export function* generateERC721Options(): Generator> { - yield* generateAlternatives(blueprint); + for (const opts of generateAlternatives(blueprint)) { + // crossChainBridging x upgradeable is covered by the reduced blueprint below + if (!(opts.crossChainBridging && opts.upgradeable)) { + yield opts; + } + } + + yield* generateAlternatives(crossChainBridgingUpgradeableBlueprint); } diff --git a/packages/core/solidity/src/generate/governor.ts b/packages/core/solidity/src/generate/governor.ts index 765f4e69f..517f51f44 100644 --- a/packages/core/solidity/src/generate/governor.ts +++ b/packages/core/solidity/src/generate/governor.ts @@ -23,11 +23,26 @@ const blueprint = { timelock: timelockOptions, storage: booleans, settings: booleans, + crossChainExecution: [false], upgradeable: upgradeableOptions, access: accessOptions, info: infoOptions, }; +// crossChainExecution adds a single extension with no interactions with other options, +// so cross it against a reduced blueprint to avoid doubling the exhaustive matrix. +const crossChainExecutionBlueprint = { + ...blueprint, + proposalThreshold: ['0'], + quorumMode: ['percent'] as const, + storage: [false], + settings: [true], + crossChainExecution: [true], + access: [false] as const, + info: [{}], +}; + export function* generateGovernorOptions(): Generator> { yield* generateAlternatives(blueprint); + yield* generateAlternatives(crossChainExecutionBlueprint); } diff --git a/packages/core/solidity/src/get-versioned-remappings.test.ts.md b/packages/core/solidity/src/get-versioned-remappings.test.ts.md index 939a6022f..79a33c813 100644 --- a/packages/core/solidity/src/get-versioned-remappings.test.ts.md +++ b/packages/core/solidity/src/get-versioned-remappings.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ - '@openzeppelin/contracts/=@openzeppelin/contracts@5.6.0/', + '@openzeppelin/contracts/=@openzeppelin/contracts@5.7.0/', ] ## getVersionedRemappings upgradeable uups @@ -17,8 +17,8 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ - '@openzeppelin/contracts/=@openzeppelin/contracts@5.6.0/', - '@openzeppelin/contracts-upgradeable/=@openzeppelin/contracts-upgradeable@5.6.0/', + '@openzeppelin/contracts/=@openzeppelin/contracts@5.7.0/', + '@openzeppelin/contracts-upgradeable/=@openzeppelin/contracts-upgradeable@5.7.0/', ] ## getVersionedRemappings upgradeable transparent @@ -26,6 +26,6 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ - '@openzeppelin/contracts/=@openzeppelin/contracts@5.6.0/', - '@openzeppelin/contracts-upgradeable/=@openzeppelin/contracts-upgradeable@5.6.0/', + '@openzeppelin/contracts/=@openzeppelin/contracts@5.7.0/', + '@openzeppelin/contracts-upgradeable/=@openzeppelin/contracts-upgradeable@5.7.0/', ] diff --git a/packages/core/solidity/src/get-versioned-remappings.test.ts.snap b/packages/core/solidity/src/get-versioned-remappings.test.ts.snap index 58b44e855..9bd630f9e 100644 Binary files a/packages/core/solidity/src/get-versioned-remappings.test.ts.snap and b/packages/core/solidity/src/get-versioned-remappings.test.ts.snap differ diff --git a/packages/core/solidity/src/governor.test.ts b/packages/core/solidity/src/governor.test.ts index 3d7535024..ce5a3dcc7 100644 --- a/packages/core/solidity/src/governor.test.ts +++ b/packages/core/solidity/src/governor.test.ts @@ -142,6 +142,26 @@ testGovernor('governor with erc20votes, upgradable', { upgradeable: 'uups', }); +testGovernor('governor with crossChainExecution', { + crossChainExecution: true, +}); + +testGovernor('governor with crossChainExecution, no timelock', { + crossChainExecution: true, + timelock: false, +}); + +testGovernor('governor with crossChainExecution, storage, settings', { + crossChainExecution: true, + storage: true, + settings: true, +}); + +testGovernor('governor with crossChainExecution, upgradable', { + crossChainExecution: true, + upgradeable: 'uups', +}); + testAPIEquivalence('API default'); testAPIEquivalence('API basic', { diff --git a/packages/core/solidity/src/governor.test.ts.md b/packages/core/solidity/src/governor.test.ts.md index cf4b429de..f2bc837b9 100644 --- a/packages/core/solidity/src/governor.test.ts.md +++ b/packages/core/solidity/src/governor.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -99,7 +99,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -185,7 +185,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -277,7 +277,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -369,7 +369,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -458,7 +458,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -553,7 +553,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -639,7 +639,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -725,7 +725,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -817,7 +817,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -906,7 +906,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -992,7 +992,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1082,7 +1082,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1168,7 +1168,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1254,7 +1254,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1343,7 +1343,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1429,7 +1429,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1518,7 +1518,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ @@ -1604,7 +1604,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {GovernorUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/GovernorUpgradeable.sol";␊ @@ -1701,3 +1701,326 @@ Generated by [AVA](https://avajs.dev). }␊ }␊ ` + +## governor with crossChainExecution + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + import {GovernorCountingSimple} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";␊ + import {GovernorCrosschain} from "@openzeppelin/contracts/governance/extensions/GovernorCrosschain.sol";␊ + import {GovernorTimelockControl} from "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";␊ + import {GovernorVotes} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";␊ + import {GovernorVotesQuorumFraction} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + ␊ + contract MyGovernor is Governor, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl, GovernorCrosschain {␊ + constructor(IVotes _token, TimelockController _timelock)␊ + Governor("MyGovernor")␊ + GovernorVotes(_token)␊ + GovernorVotesQuorumFraction(4)␊ + GovernorTimelockControl(_timelock)␊ + {}␊ + ␊ + function votingDelay() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + ␊ + function votingPeriod() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function state(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (ProposalState)␊ + {␊ + return super.state(proposalId);␊ + }␊ + ␊ + function proposalNeedsQueuing(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (bool)␊ + {␊ + return super.proposalNeedsQueuing(proposalId);␊ + }␊ + ␊ + function _queueOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint48)␊ + {␊ + return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executeOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + {␊ + super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint256)␊ + {␊ + return super._cancel(targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executor()␊ + internal␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (address)␊ + {␊ + return super._executor();␊ + }␊ + }␊ + ` + +## governor with crossChainExecution, no timelock + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ + import {GovernorCountingSimple} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";␊ + import {GovernorCrosschain} from "@openzeppelin/contracts/governance/extensions/GovernorCrosschain.sol";␊ + import {GovernorVotes} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";␊ + import {GovernorVotesQuorumFraction} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + ␊ + contract MyGovernor is Governor, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorCrosschain {␊ + constructor(IVotes _token)␊ + Governor("MyGovernor")␊ + GovernorVotes(_token)␊ + GovernorVotesQuorumFraction(4)␊ + {}␊ + ␊ + function votingDelay() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + ␊ + function votingPeriod() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + }␊ + ` + +## governor with crossChainExecution, storage, settings + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + import {GovernorCountingSimple} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";␊ + import {GovernorCrosschain} from "@openzeppelin/contracts/governance/extensions/GovernorCrosschain.sol";␊ + import {GovernorSettings} from "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";␊ + import {GovernorStorage} from "@openzeppelin/contracts/governance/extensions/GovernorStorage.sol";␊ + import {GovernorTimelockControl} from "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";␊ + import {GovernorVotes} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";␊ + import {GovernorVotesQuorumFraction} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + ␊ + contract MyGovernor is Governor, GovernorSettings, GovernorCountingSimple, GovernorStorage, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl, GovernorCrosschain {␊ + constructor(IVotes _token, TimelockController _timelock)␊ + Governor("MyGovernor")␊ + GovernorSettings(50400 /* 1 week */, 50400 /* 1 week */, 0)␊ + GovernorVotes(_token)␊ + GovernorVotesQuorumFraction(4)␊ + GovernorTimelockControl(_timelock)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function state(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (ProposalState)␊ + {␊ + return super.state(proposalId);␊ + }␊ + ␊ + function proposalNeedsQueuing(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (bool)␊ + {␊ + return super.proposalNeedsQueuing(proposalId);␊ + }␊ + ␊ + function proposalThreshold()␊ + public␊ + view␊ + override(Governor, GovernorSettings)␊ + returns (uint256)␊ + {␊ + return super.proposalThreshold();␊ + }␊ + ␊ + function _propose(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, string memory description, address proposer)␊ + internal␊ + override(Governor, GovernorStorage)␊ + returns (uint256)␊ + {␊ + return super._propose(targets, values, calldatas, description, proposer);␊ + }␊ + ␊ + function _queueOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint48)␊ + {␊ + return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executeOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + {␊ + super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint256)␊ + {␊ + return super._cancel(targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executor()␊ + internal␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (address)␊ + {␊ + return super._executor();␊ + }␊ + }␊ + ` + +## governor with crossChainExecution, upgradable + +> Snapshot 1 + + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {GovernorUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/GovernorUpgradeable.sol";␊ + import {TimelockControllerUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/TimelockControllerUpgradeable.sol";␊ + import {GovernorCountingSimpleUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorCountingSimpleUpgradeable.sol";␊ + import {GovernorCrosschainUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorCrosschainUpgradeable.sol";␊ + import {GovernorTimelockControlUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorTimelockControlUpgradeable.sol";␊ + import {GovernorVotesQuorumFractionUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesQuorumFractionUpgradeable.sol";␊ + import {GovernorVotesUpgradeable} from "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesUpgradeable.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ + import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";␊ + ␊ + contract MyGovernor is Initializable, GovernorUpgradeable, GovernorCountingSimpleUpgradeable, GovernorVotesUpgradeable, GovernorVotesQuorumFractionUpgradeable, GovernorTimelockControlUpgradeable, GovernorCrosschainUpgradeable, UUPSUpgradeable {␊ + /// @custom:oz-upgrades-unsafe-allow constructor␊ + constructor() {␊ + _disableInitializers();␊ + }␊ + ␊ + function initialize(IVotes _token, TimelockControllerUpgradeable _timelock)␊ + public␊ + initializer␊ + {␊ + __Governor_init("MyGovernor");␊ + __GovernorCountingSimple_init();␊ + __GovernorVotes_init(_token);␊ + __GovernorVotesQuorumFraction_init(4);␊ + __GovernorTimelockControl_init(_timelock);␊ + __GovernorCrosschain_init();␊ + }␊ + ␊ + function votingDelay() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + ␊ + function votingPeriod() public pure override returns (uint256) {␊ + return 50400; // 1 week␊ + }␊ + ␊ + function _authorizeUpgrade(address newImplementation)␊ + internal␊ + override␊ + onlyGovernance␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function state(uint256 proposalId)␊ + public␊ + view␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + returns (ProposalState)␊ + {␊ + return super.state(proposalId);␊ + }␊ + ␊ + function proposalNeedsQueuing(uint256 proposalId)␊ + public␊ + view␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + returns (bool)␊ + {␊ + return super.proposalNeedsQueuing(proposalId);␊ + }␊ + ␊ + function _queueOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + returns (uint48)␊ + {␊ + return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executeOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + {␊ + super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + returns (uint256)␊ + {␊ + return super._cancel(targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executor()␊ + internal␊ + view␊ + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable)␊ + returns (address)␊ + {␊ + return super._executor();␊ + }␊ + }␊ + ` diff --git a/packages/core/solidity/src/governor.test.ts.snap b/packages/core/solidity/src/governor.test.ts.snap index ed75fc0fd..a92d98546 100644 Binary files a/packages/core/solidity/src/governor.test.ts.snap and b/packages/core/solidity/src/governor.test.ts.snap differ diff --git a/packages/core/solidity/src/governor.ts b/packages/core/solidity/src/governor.ts index 6dd8a0e13..8c6bd69db 100644 --- a/packages/core/solidity/src/governor.ts +++ b/packages/core/solidity/src/governor.ts @@ -28,6 +28,7 @@ export const defaults: Required = { quorumAbsolute: '', storage: false, settings: true, + crossChainExecution: false, } as const; export const votesOptions = ['erc20votes', 'erc721votes'] as const; @@ -57,6 +58,7 @@ export interface GovernorOptions extends CommonOptions { timelock?: TimelockOptions; storage?: boolean; settings?: boolean; + crossChainExecution?: boolean; } export function isAccessControlRequired(_: Partial): boolean { @@ -78,6 +80,7 @@ function withDefaults(opts: GovernorOptions): Required { votes: opts.votes ?? defaults.votes, clockMode: opts.clockMode ?? defaults.clockMode, timelock: opts.timelock ?? defaults.timelock, + crossChainExecution: opts.crossChainExecution ?? defaults.crossChainExecution, }; } @@ -95,6 +98,7 @@ export function buildGovernor(opts: GovernorOptions): Contract { addVotes(c); addQuorum(c, allOpts); addTimelock(c, allOpts); + addCrossChainExecution(c, allOpts); setUpgradeableGovernor(c, allOpts.upgradeable); setInfo(c, allOpts.info); @@ -383,6 +387,17 @@ function addTimelock(c: ContractBuilder, { timelock }: Required c.addOverride(timelockParent, functions.proposalNeedsQueuing); } +function addCrossChainExecution(c: ContractBuilder, { crossChainExecution }: Required) { + if (!crossChainExecution) { + return; + } + + c.addParent({ + name: 'GovernorCrosschain', + path: '@openzeppelin/contracts/governance/extensions/GovernorCrosschain.sol', + }); +} + function addStorage(c: ContractBuilder, { storage }: GovernorOptions) { if (storage) { const GovernorStorage = { diff --git a/packages/core/solidity/src/set-crosschain-linked.ts b/packages/core/solidity/src/set-crosschain-linked.ts new file mode 100644 index 000000000..422f5d673 --- /dev/null +++ b/packages/core/solidity/src/set-crosschain-linked.ts @@ -0,0 +1,37 @@ +import type { BaseFunction, ContractBuilder, ImportContract } from './contract'; +import type { Access } from './set-access-control'; +import { requireAccessControl } from './set-access-control'; + +export const setLink: BaseFunction = { + name: 'setLink', + kind: 'public', + args: [ + { name: 'gateway', type: 'address' }, + { name: 'counterpart', type: 'bytes memory' }, + ], +}; + +/** + * Adds a `CrosschainLinked` based bridging extension, along with the `setLink` function used to register + * the counterparts it can bridge with. `parent` is the token-specific extension, e.g. `ERC721Crosschain`. + */ +export function addCrosschainLinked( + c: ContractBuilder, + parent: ImportContract, + crossChainLinkAllowOverride: boolean, + access: Access, +) { + c.addParent(parent); + + c.addConstructionOnly( + { + name: 'CrosschainLinked', + path: '@openzeppelin/contracts/crosschain/CrosschainLinked.sol', + }, + [{ lit: 'links' }], + ); + c.addConstructorArgument({ type: { name: 'CrosschainLinked.Link[] memory' }, name: 'links' }); + + requireAccessControl(c, setLink, access, 'CROSSCHAIN_LINKER', 'crosschainLinker'); + c.addFunctionCode(`_setLink(gateway, counterpart, ${crossChainLinkAllowOverride});`, setLink); +} diff --git a/packages/core/solidity/src/stablecoin.test.ts.md b/packages/core/solidity/src/stablecoin.test.ts.md index 15bcc1513..f9dc949ec 100644 --- a/packages/core/solidity/src/stablecoin.test.ts.md +++ b/packages/core/solidity/src/stablecoin.test.ts.md @@ -9,7 +9,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -25,7 +25,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -42,7 +42,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -81,7 +81,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -124,7 +124,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -163,7 +163,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -203,7 +203,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -224,7 +224,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -240,7 +240,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -265,7 +265,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -290,7 +290,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -319,7 +319,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -344,7 +344,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -361,7 +361,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -377,7 +377,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Community Contracts commit b0ddd27␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20Freezable} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Freezable.sol";␊ @@ -412,7 +412,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Community Contracts commit b0ddd27␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20Restricted} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Restricted.sol";␊ @@ -455,7 +455,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Community Contracts commit b0ddd27␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20Restricted} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Restricted.sol";␊ @@ -494,7 +494,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -530,7 +530,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -566,7 +566,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -611,7 +611,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -628,7 +628,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and Community Contracts commit b0ddd27␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and Community Contracts commit b0ddd27␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20Freezable} from "@openzeppelin/community-contracts/token/ERC20/extensions/ERC20Freezable.sol";␊ diff --git a/packages/core/solidity/src/stablecoin.test.ts.snap b/packages/core/solidity/src/stablecoin.test.ts.snap index 2ac5475ca..a27e407e9 100644 Binary files a/packages/core/solidity/src/stablecoin.test.ts.snap and b/packages/core/solidity/src/stablecoin.test.ts.snap differ diff --git a/packages/core/solidity/src/utils/version.ts b/packages/core/solidity/src/utils/version.ts index 4ff501637..6f68fd6dc 100644 --- a/packages/core/solidity/src/utils/version.ts +++ b/packages/core/solidity/src/utils/version.ts @@ -1,4 +1,4 @@ /** * Semantic version string representing of the minimum compatible version of Contracts to display in output. */ -export const compatibleContractsSemver = '^5.6.0'; +export const compatibleContractsSemver = '^5.7.0'; diff --git a/packages/core/solidity/src/zip-foundry.test.ts b/packages/core/solidity/src/zip-foundry.test.ts index 87aba8948..e2e146e5b 100644 --- a/packages/core/solidity/src/zip-foundry.test.ts +++ b/packages/core/solidity/src/zip-foundry.test.ts @@ -8,6 +8,7 @@ import { buildERC721 } from './erc721'; import { buildERC1155 } from './erc1155'; import { buildAccount } from './account'; import { buildCustom } from './custom'; +import { buildGovernor } from './governor'; import { promises as fs } from 'fs'; import path from 'path'; import os from 'os'; @@ -118,6 +119,29 @@ test.serial('erc1155 transparent, ownable', async t => { await runTest(c, t, opts); }); +test.serial('erc721 crossChainBridging erc7786native', async t => { + const opts: GenericOptions = { + kind: 'ERC721', + name: 'My Token', + symbol: 'MTK', + access: 'ownable', + crossChainBridging: 'erc7786native', + }; + const c = buildERC721(opts); + await runTest(c, t, opts); +}); + +test.serial('governor', async t => { + const opts: GenericOptions = { + kind: 'Governor', + name: 'My Governor', + delay: '1 day', + period: '1 week', + }; + const c = buildGovernor(opts); + await runTest(c, t, opts); +}); + test.serial('account ecdsa', async t => { const opts: GenericOptions = { kind: 'Account', name: 'My Account', signer: 'ECDSA' }; const c = buildAccount(opts); diff --git a/packages/core/solidity/src/zip-foundry.test.ts.md b/packages/core/solidity/src/zip-foundry.test.ts.md index 0ec24b8f0..1dc7039e3 100644 --- a/packages/core/solidity/src/zip-foundry.test.ts.md +++ b/packages/core/solidity/src/zip-foundry.test.ts.md @@ -120,7 +120,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -330,7 +330,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -590,7 +590,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";␊ @@ -777,7 +777,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -942,7 +942,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1108,7 +1108,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -1158,6 +1158,393 @@ Generated by [AVA](https://avajs.dev). `, ] +## erc721 crossChainBridging erc7786native + +> Snapshot 1 + + [ + `#!/usr/bin/env bash␊ + ␊ + # Check if git is installed␊ + if ! which git &> /dev/null␊ + then␊ + echo "git command not found. Install git and try again."␊ + exit 1␊ + fi␊ + ␊ + # Check if Foundry is installed␊ + if ! which forge &> /dev/null␊ + then␊ + echo "forge command not found. Install Foundry and try again. See https://book.getfoundry.sh/getting-started/installation"␊ + exit 1␊ + fi␊ + ␊ + # Setup Foundry project␊ + if ! [ -f "foundry.toml" ]␊ + then␊ + echo "Initializing Foundry project..."␊ + ␊ + # Backup Wizard template readme to avoid it being overwritten␊ + mv README.md README-oz.md␊ + ␊ + # Initialize sample Foundry project␊ + forge init --force --quiet␊ + ␊ + # Install OpenZeppelin Contracts␊ + forge install OpenZeppelin/openzeppelin-contracts@vX.Y.Z --quiet␊ + ␊ + # Remove unneeded Foundry template files␊ + rm src/Counter.sol␊ + rm script/Counter.s.sol␊ + rm test/Counter.t.sol␊ + rm README.md␊ + ␊ + # Restore Wizard template readme␊ + mv README-oz.md README.md␊ + ␊ + # Add remappings␊ + if [ -f "remappings.txt" ]␊ + then␊ + echo "" >> remappings.txt␊ + fi␊ + echo "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/" >> remappings.txt␊ + ␊ + # Perform initial git commit␊ + git add .␊ + git commit -m "openzeppelin: add wizard output" --quiet␊ + ␊ + echo "Done."␊ + else␊ + echo "Foundry project already initialized."␊ + fi␊ + `, + `# Sample Foundry Project␊ + ␊ + This project demonstrates a basic Foundry use case. It comes with a contract generated by [OpenZeppelin Wizard](https://wizard.openzeppelin.com/), a test for that contract, and a script that deploys that contract.␊ + ␊ + ## Installing Foundry␊ + ␊ + See [Foundry installation guide](https://book.getfoundry.sh/getting-started/installation).␊ + ␊ + ## Initializing the project␊ + ␊ + \`\`\`␊ + bash setup.sh␊ + \`\`\`␊ + ␊ + ## Testing the contract␊ + ␊ + \`\`\`␊ + forge test␊ + \`\`\`␊ + ␊ + ## Deploying the contract␊ + ␊ + You can simulate a deployment by running the script:␊ + ␊ + \`\`\`␊ + forge script script/MyToken.s.sol␊ + \`\`\`␊ + ␊ + See [Solidity scripting guide](https://book.getfoundry.sh/guides/scripting-with-solidity) for more information.␊ + `, + `// SPDX-License-Identifier: MIT␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Script} from "forge-std/Script.sol";␊ + import {console} from "forge-std/console.sol";␊ + import {MyToken} from "src/MyToken.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + ␊ + contract MyTokenScript is Script {␊ + function setUp() public {}␊ + ␊ + function run() public {␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + vm.startBroadcast();␊ + CrosschainLinked.Link[] memory links = ;␊ + address initialOwner = ;␊ + MyToken instance = new MyToken(links, initialOwner);␊ + console.log("Contract deployed to %s", address(instance));␊ + vm.stopBroadcast();␊ + */␊ + }␊ + }␊ + `, + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("My Token", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + `, + `// SPDX-License-Identifier: MIT␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Test} from "forge-std/Test.sol";␊ + import {MyToken} from "src/MyToken.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + ␊ + contract MyTokenTest is Test {␊ + MyToken public instance;␊ + ␊ + function setUp() public {␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + CrosschainLinked.Link[] memory links = ;␊ + address initialOwner = vm.addr(1);␊ + instance = new MyToken(links, initialOwner);␊ + */␊ + }␊ + ␊ + function testSomething() public {␊ + // Add your test here␊ + }␊ + }␊ + `, + ] + +## governor + +> Snapshot 1 + + [ + `#!/usr/bin/env bash␊ + ␊ + # Check if git is installed␊ + if ! which git &> /dev/null␊ + then␊ + echo "git command not found. Install git and try again."␊ + exit 1␊ + fi␊ + ␊ + # Check if Foundry is installed␊ + if ! which forge &> /dev/null␊ + then␊ + echo "forge command not found. Install Foundry and try again. See https://book.getfoundry.sh/getting-started/installation"␊ + exit 1␊ + fi␊ + ␊ + # Setup Foundry project␊ + if ! [ -f "foundry.toml" ]␊ + then␊ + echo "Initializing Foundry project..."␊ + ␊ + # Backup Wizard template readme to avoid it being overwritten␊ + mv README.md README-oz.md␊ + ␊ + # Initialize sample Foundry project␊ + forge init --force --quiet␊ + ␊ + # Install OpenZeppelin Contracts␊ + forge install OpenZeppelin/openzeppelin-contracts@vX.Y.Z --quiet␊ + ␊ + # Remove unneeded Foundry template files␊ + rm src/Counter.sol␊ + rm script/Counter.s.sol␊ + rm test/Counter.t.sol␊ + rm README.md␊ + ␊ + # Restore Wizard template readme␊ + mv README-oz.md README.md␊ + ␊ + # Add remappings␊ + if [ -f "remappings.txt" ]␊ + then␊ + echo "" >> remappings.txt␊ + fi␊ + echo "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/" >> remappings.txt␊ + ␊ + # Perform initial git commit␊ + git add .␊ + git commit -m "openzeppelin: add wizard output" --quiet␊ + ␊ + echo "Done."␊ + else␊ + echo "Foundry project already initialized."␊ + fi␊ + `, + `# Sample Foundry Project␊ + ␊ + This project demonstrates a basic Foundry use case. It comes with a contract generated by [OpenZeppelin Wizard](https://wizard.openzeppelin.com/), a test for that contract, and a script that deploys that contract.␊ + ␊ + ## Installing Foundry␊ + ␊ + See [Foundry installation guide](https://book.getfoundry.sh/getting-started/installation).␊ + ␊ + ## Initializing the project␊ + ␊ + \`\`\`␊ + bash setup.sh␊ + \`\`\`␊ + ␊ + ## Testing the contract␊ + ␊ + \`\`\`␊ + forge test␊ + \`\`\`␊ + ␊ + ## Deploying the contract␊ + ␊ + You can simulate a deployment by running the script:␊ + ␊ + \`\`\`␊ + forge script script/MyGovernor.s.sol␊ + \`\`\`␊ + ␊ + See [Solidity scripting guide](https://book.getfoundry.sh/guides/scripting-with-solidity) for more information.␊ + `, + `// SPDX-License-Identifier: MIT␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Script} from "forge-std/Script.sol";␊ + import {console} from "forge-std/console.sol";␊ + import {MyGovernor} from "src/MyGovernor.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + ␊ + contract MyGovernorScript is Script {␊ + function setUp() public {}␊ + ␊ + function run() public {␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + vm.startBroadcast();␊ + IVotes _token = ;␊ + TimelockController _timelock = ;␊ + MyGovernor instance = new MyGovernor(_token, _timelock);␊ + console.log("Contract deployed to %s", address(instance));␊ + vm.stopBroadcast();␊ + */␊ + }␊ + }␊ + `, + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + import {GovernorCountingSimple} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";␊ + import {GovernorSettings} from "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";␊ + import {GovernorTimelockControl} from "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";␊ + import {GovernorVotes} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";␊ + import {GovernorVotesQuorumFraction} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + ␊ + contract MyGovernor is Governor, GovernorSettings, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl {␊ + constructor(IVotes _token, TimelockController _timelock)␊ + Governor("My Governor")␊ + GovernorSettings(7200 /* 1 day */, 50400 /* 1 week */, 0)␊ + GovernorVotes(_token)␊ + GovernorVotesQuorumFraction(4)␊ + GovernorTimelockControl(_timelock)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function state(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (ProposalState)␊ + {␊ + return super.state(proposalId);␊ + }␊ + ␊ + function proposalNeedsQueuing(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (bool)␊ + {␊ + return super.proposalNeedsQueuing(proposalId);␊ + }␊ + ␊ + function proposalThreshold()␊ + public␊ + view␊ + override(Governor, GovernorSettings)␊ + returns (uint256)␊ + {␊ + return super.proposalThreshold();␊ + }␊ + ␊ + function _queueOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint48)␊ + {␊ + return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executeOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + {␊ + super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint256)␊ + {␊ + return super._cancel(targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executor()␊ + internal␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (address)␊ + {␊ + return super._executor();␊ + }␊ + }␊ + `, + `// SPDX-License-Identifier: MIT␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Test} from "forge-std/Test.sol";␊ + import {MyGovernor} from "src/MyGovernor.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + ␊ + contract MyGovernorTest is Test {␊ + MyGovernor public instance;␊ + ␊ + function setUp() public {␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + IVotes _token = ;␊ + TimelockController _timelock = ;␊ + instance = new MyGovernor(_token, _timelock);␊ + */␊ + }␊ + ␊ + function testSomething() public {␊ + // Add your test here␊ + }␊ + }␊ + `, + ] + ## account ecdsa > Snapshot 1 @@ -1271,7 +1658,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -1436,7 +1823,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -1758,7 +2145,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";␊ @@ -1912,7 +2299,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2055,7 +2442,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -2202,7 +2589,7 @@ Generated by [AVA](https://avajs.dev). }␊ `, `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ diff --git a/packages/core/solidity/src/zip-foundry.test.ts.snap b/packages/core/solidity/src/zip-foundry.test.ts.snap index 53c0c35ef..f9e10cc9b 100644 Binary files a/packages/core/solidity/src/zip-foundry.test.ts.snap and b/packages/core/solidity/src/zip-foundry.test.ts.snap differ diff --git a/packages/core/solidity/src/zip-foundry.ts b/packages/core/solidity/src/zip-foundry.ts index e9446dade..4f632ae8a 100644 --- a/packages/core/solidity/src/zip-foundry.ts +++ b/packages/core/solidity/src/zip-foundry.ts @@ -1,6 +1,6 @@ import JSZip from 'jszip'; import type { GenericOptions } from './build-generic'; -import type { Contract } from './contract'; +import type { Contract, FunctionArgument } from './contract'; import { printContract } from './print'; import SOLIDITY_VERSION from './solidity-version.json'; import contracts from '../openzeppelin-contracts'; @@ -8,6 +8,8 @@ import type { Lines } from './utils/format-lines'; import { formatLinesWithSpaces, spaceBetween } from './utils/format-lines'; import { stringifyUnicodeSafe } from './utils/sanitize'; import type { Upgradeable } from './set-upgradeable'; +import { withHelpers } from './options'; +import { addTodoAndCommentOut, hasNonAddressArgs, isAddressType } from './zip-shared'; function getHeader(c: Contract) { return [`// SPDX-License-Identifier: ${c.license}`, `pragma solidity ^${SOLIDITY_VERSION};`]; @@ -30,9 +32,39 @@ function getImports(c: Contract, prepopulateImports: string[]): string[] { ); } result.push(`import {${c.name}} from "src/${c.name}.sol";`); + result.push(...getConstructorArgTypeImports(c)); return result; } +/** + * Imports needed by the types that non-address constructor arguments are declared with, + * for example `CrosschainLinked` for a `CrosschainLinked.Link[] memory` argument. Without + * these, uncommenting the generated deployment would not compile. + */ +function getConstructorArgTypeImports(c: Contract): string[] { + const { transformImport } = withHelpers(c); + const statements = new Set(); + + for (const arg of c.constructorArgs) { + if (typeof arg.type === 'string') { + continue; // primitive type, nothing to import + } + const baseName = getBaseTypeName(arg.type.name); + const imported = c.imports.find(i => i.name === baseName); + if (imported !== undefined) { + const { name, path } = transformImport(imported); + statements.add(`import {${name}} from "${path}";`); + } + } + + return Array.from(statements).sort(); +} + +// The contract name that a declared type refers to, e.g. `CrosschainLinked.Link[] memory` -> `CrosschainLinked`. +function getBaseTypeName(type: string): string { + return type.split(/[.[\s]/)[0]!; +} + function getDeploymentCode( c: Contract, args: string[], @@ -85,36 +117,26 @@ const test = (c: Contract, opts?: GenericOptions) => { ); function getTestCase(c: Contract) { - const args = getAddressArgs(c); + let i = 1; // private key index starts from 1 since it must be non-zero + const variables = getVariables(c, opts, () => `vm.addr(${i++})`); + const setUpLines = [...variables, ...getDeploymentCode(c, getArgNames(c), false, opts?.upgradeable)]; return [ `contract ${c.name}Test is Test {`, spaceBetween( [`${c.name} public instance;`], - [ - 'function setUp() public {', - getAddressVariables(c, args), - getDeploymentCode(c, args, false, opts?.upgradeable), - '}', - ], + ['function setUp() public {', hasNonAddressArgs(c) ? addTodoAndCommentOut(c, setUpLines) : setUpLines, '}'], getContractSpecificTestFunction(), ), '}', ]; } - function getAddressVariables(c: Contract, args: string[]): Lines[] { - const vars = []; - let i = 1; // private key index starts from 1 since it must be non-zero - if (c.upgradeable && opts?.upgradeable === 'transparent' && !args.includes('initialOwner')) { - vars.push(`address initialOwner = vm.addr(${i++});`); - } - for (const arg of args) { - vars.push(`address ${arg} = vm.addr(${i++});`); - } - return vars; - } - function getContractSpecificTestFunction(): Lines[] { + if (hasNonAddressArgs(c)) { + // The deployment in setUp is commented out until the user fills in the missing + // constructor arguments, so there is no `instance` to test against yet. + return ['function testSomething() public {', ['// Add your test here'], '}']; + } if (opts !== undefined) { switch (opts.kind) { case 'ERC20': @@ -145,14 +167,43 @@ const test = (c: Contract, opts?: GenericOptions) => { } }; -function getAddressArgs(c: Contract): string[] { - const args = []; - for (const constructorArg of c.constructorArgs) { - if (constructorArg.type === 'address') { - args.push(constructorArg.name); +function getArgNames(c: Contract): string[] { + return c.constructorArgs.map(arg => arg.name); +} + +/** + * Local variable declarations for the transparent proxy admin owner (when needed) and for each + * constructor argument. `addressValue` renders the initializer for `address` arguments, which + * differs between the test (deterministic `vm.addr`) and the script (a placeholder to fill in). + */ +function getVariables(c: Contract, opts: GenericOptions | undefined, addressValue: (name: string) => string): Lines[] { + const vars = []; + if (needsInitialOwnerVariable(c, opts)) { + vars.push(`address initialOwner = ${addressValue('initialOwner')};`); + } + for (const arg of c.constructorArgs) { + if (isAddressType(arg)) { + vars.push(`address ${arg.name} = ${addressValue(arg.name)};`); + } else { + vars.push(`${getLocalVariableType(c, arg)} ${arg.name} = ;`); } } - return args; + return vars; +} + +// Type to use when declaring a constructor argument as a local variable. +// Uses the same name transformation as the contract itself, so that upgradeable +// contracts refer to the transpiled type (e.g. `CrosschainLinkedUpgradeable.Link[]`). +function getLocalVariableType(c: Contract, arg: FunctionArgument): string { + const type = typeof arg.type === 'string' ? arg.type : withHelpers(c).transformName(arg.type); + return type.replace(/\bcalldata\b/, 'memory'); +} + +// The `initialOwner` for the transparent proxy admin, unless the constructor already has an argument with that name. +function needsInitialOwnerVariable(c: Contract, opts?: GenericOptions): boolean { + return ( + c.upgradeable && opts?.upgradeable === 'transparent' && !c.constructorArgs.some(arg => arg.name === 'initialOwner') + ); } const script = (c: Contract, opts?: GenericOptions) => { @@ -166,10 +217,10 @@ const script = (c: Contract, opts?: GenericOptions) => { ); function getScript(c: Contract) { - const args = getAddressArgs(c); + const args = getArgNames(c); const deploymentLines = [ 'vm.startBroadcast();', - ...getAddressVariables(c, args), + ...getVariables(c, opts, name => ``), ...getDeploymentCode(c, args, true, opts?.upgradeable), `console.log("${c.upgradeable ? 'Proxy' : 'Contract'} deployed to %s", address(instance));`, 'vm.stopBroadcast();', @@ -178,31 +229,11 @@ const script = (c: Contract, opts?: GenericOptions) => { `contract ${c.name}Script is Script {`, spaceBetween( ['function setUp() public {}'], - ['function run() public {', args.length > 0 ? addTodoAndCommentOut(deploymentLines) : deploymentLines, '}'], + ['function run() public {', args.length > 0 ? addTodoAndCommentOut(c, deploymentLines) : deploymentLines, '}'], ), '}', ]; } - - function getAddressVariables(c: Contract, args: string[]): Lines[] { - const vars = []; - if (c.upgradeable && opts?.upgradeable === 'transparent' && !args.includes('initialOwner')) { - vars.push('address initialOwner = ;'); - } - for (const arg of args) { - vars.push(`address ${arg} = ;`); - } - return vars; - } - - function addTodoAndCommentOut(lines: Lines[]) { - return [ - '// TODO: Set addresses for the variables below, then uncomment the following section:', - '/*', - ...lines, - '*/', - ]; - } }; const setupSh = (c: Contract) => `\ diff --git a/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.md b/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.md index cca6743d4..acf0f6e92 100644 --- a/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.md +++ b/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.md @@ -11,7 +11,7 @@ Generated by [AVA](https://avajs.dev). [ `contracts/MyToken.sol:␊ // SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -213,7 +213,7 @@ Generated by [AVA](https://avajs.dev). [ `contracts/MyToken.sol:␊ // SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ diff --git a/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.snap b/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.snap index 994b53faf..a602558b5 100644 Binary files a/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.snap and b/packages/core/solidity/src/zip-hardhat-polkadot.test.ts.snap differ diff --git a/packages/core/solidity/src/zip-hardhat.test.ts b/packages/core/solidity/src/zip-hardhat.test.ts index 250578191..dfefac2ec 100644 --- a/packages/core/solidity/src/zip-hardhat.test.ts +++ b/packages/core/solidity/src/zip-hardhat.test.ts @@ -18,6 +18,7 @@ import type { JSZipObject } from 'jszip'; import type JSZip from 'jszip'; import type { GenericOptions } from './build-generic'; import { buildAccount } from './account'; +import { buildGovernor } from './governor'; interface Context { tempFolder: string; @@ -93,6 +94,29 @@ test.serial('erc1155 basic', async t => { await runIgnitionTest(c, t, opts); }); +test.serial('erc721 crossChainBridging erc7786native', async t => { + const opts: GenericOptions = { + kind: 'ERC721', + name: 'My Token', + symbol: 'MTK', + access: 'ownable', + crossChainBridging: 'erc7786native', + }; + const c = buildERC721(opts); + await runIgnitionTest(c, t, opts); +}); + +test.serial('governor', async t => { + const opts: GenericOptions = { + kind: 'Governor', + name: 'My Governor', + delay: '1 day', + period: '1 week', + }; + const c = buildGovernor(opts); + await runIgnitionTest(c, t, opts); +}); + test.serial('account ecdsa', async t => { const opts: GenericOptions = { kind: 'Account', name: 'My Account', signer: 'ECDSA' }; const c = buildAccount(opts); diff --git a/packages/core/solidity/src/zip-hardhat.test.ts.md b/packages/core/solidity/src/zip-hardhat.test.ts.md index 9347888f3..3edf8b119 100644 --- a/packages/core/solidity/src/zip-hardhat.test.ts.md +++ b/packages/core/solidity/src/zip-hardhat.test.ts.md @@ -10,7 +10,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -100,7 +100,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ @@ -148,7 +148,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -282,8 +282,8 @@ Generated by [AVA](https://avajs.dev). "license": "MIT",␊ "devDependencies": {␊ "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ - "@openzeppelin/contracts": "^5.6.0",␊ - "@openzeppelin/contracts-upgradeable": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "@openzeppelin/contracts-upgradeable": "^5.7.0",␊ "@openzeppelin/hardhat-upgrades": "^4.0.2",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ @@ -347,7 +347,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";␊ @@ -403,8 +403,8 @@ Generated by [AVA](https://avajs.dev). "license": "MIT",␊ "devDependencies": {␊ "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ - "@openzeppelin/contracts": "^5.6.0",␊ - "@openzeppelin/contracts-upgradeable": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "@openzeppelin/contracts-upgradeable": "^5.7.0",␊ "@openzeppelin/hardhat-upgrades": "^4.0.2",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ @@ -466,7 +466,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -516,7 +516,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ @@ -555,13 +555,278 @@ Generated by [AVA](https://avajs.dev). `, ] +## erc721 crossChainBridging erc7786native + +> Snapshot 1 + + [ + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ + import {CrosschainLinked} from "@openzeppelin/contracts/crosschain/CrosschainLinked.sol";␊ + import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";␊ + import {ERC721Crosschain} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Crosschain.sol";␊ + ␊ + contract MyToken is ERC721, ERC721Crosschain, Ownable {␊ + constructor(CrosschainLinked.Link[] memory links, address initialOwner)␊ + ERC721("My Token", "MTK")␊ + CrosschainLinked(links)␊ + Ownable(initialOwner)␊ + {}␊ + ␊ + function setLink(address gateway, bytes memory counterpart) public onlyOwner {␊ + _setLink(gateway, counterpart, false);␊ + }␊ + }␊ + `, + `import { defineConfig } from "hardhat/config";␊ + import hardhatEthers from "@nomicfoundation/hardhat-ethers";␊ + import hardhatIgnitionEthers from "@nomicfoundation/hardhat-ignition-ethers";␊ + ␊ + export default defineConfig({␊ + plugins: [hardhatEthers, hardhatIgnitionEthers],␊ + solidity: {␊ + version: "0.8.27",␊ + settings: {␊ + evmVersion: 'cancun',␊ + optimizer: {␊ + enabled: true,␊ + },␊ + },␊ + },␊ + });␊ + `, + `{␊ + "name": "hardhat-sample",␊ + "version": "0.0.1",␊ + "type": "module",␊ + "description": "",␊ + "main": "index.js",␊ + "scripts": {␊ + "compile": "hardhat compile",␊ + "test": "hardhat compile && ava"␊ + },␊ + "author": "",␊ + "license": "MIT",␊ + "devDependencies": {␊ + "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ + "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ + "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "ava": "^6.0.0",␊ + "ethers": "^6.8.1",␊ + "hardhat": "^3.6.0",␊ + "tsx": "^4.7.0",␊ + "typescript": "^5.0.0"␊ + }␊ + }`, + `import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";␊ + ␊ + export default buildModule("MyTokenModule", (m) => {␊ + ␊ + // TODO: Set values for the constructor arguments below␊ + const myToken = m.contract("MyToken", [links, initialOwner]);␊ + ␊ + return { myToken };␊ + });␊ + `, + `import test from "ava";␊ + import hre from "hardhat";␊ + ␊ + const connection = await hre.network.create();␊ + const { ethers } = connection;␊ + ␊ + test.after.always(() => connection.close());␊ + ␊ + test("MyToken", async t => {␊ + const ContractFactory = await ethers.getContractFactory("MyToken");␊ + ␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + const links = ...;␊ + const initialOwner = (await ethers.getSigners())[1].address;␊ + const instance = await ContractFactory.deploy(links, initialOwner);␊ + await instance.waitForDeployment();␊ + */␊ + ␊ + t.pass();␊ + });␊ + `, + ] + +## governor + +> Snapshot 1 + + [ + `// SPDX-License-Identifier: MIT␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ + pragma solidity ^0.8.27;␊ + ␊ + import {Governor} from "@openzeppelin/contracts/governance/Governor.sol";␊ + import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol";␊ + import {GovernorCountingSimple} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";␊ + import {GovernorSettings} from "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";␊ + import {GovernorTimelockControl} from "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";␊ + import {GovernorVotes} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";␊ + import {GovernorVotesQuorumFraction} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";␊ + import {IVotes} from "@openzeppelin/contracts/governance/utils/IVotes.sol";␊ + ␊ + contract MyGovernor is Governor, GovernorSettings, GovernorCountingSimple, GovernorVotes, GovernorVotesQuorumFraction, GovernorTimelockControl {␊ + constructor(IVotes _token, TimelockController _timelock)␊ + Governor("My Governor")␊ + GovernorSettings(7200 /* 1 day */, 50400 /* 1 week */, 0)␊ + GovernorVotes(_token)␊ + GovernorVotesQuorumFraction(4)␊ + GovernorTimelockControl(_timelock)␊ + {}␊ + ␊ + // The following functions are overrides required by Solidity.␊ + ␊ + function state(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (ProposalState)␊ + {␊ + return super.state(proposalId);␊ + }␊ + ␊ + function proposalNeedsQueuing(uint256 proposalId)␊ + public␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (bool)␊ + {␊ + return super.proposalNeedsQueuing(proposalId);␊ + }␊ + ␊ + function proposalThreshold()␊ + public␊ + view␊ + override(Governor, GovernorSettings)␊ + returns (uint256)␊ + {␊ + return super.proposalThreshold();␊ + }␊ + ␊ + function _queueOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint48)␊ + {␊ + return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executeOperations(uint256 proposalId, address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + {␊ + super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _cancel(address[] memory targets, uint256[] memory values, bytes[] memory calldatas, bytes32 descriptionHash)␊ + internal␊ + override(Governor, GovernorTimelockControl)␊ + returns (uint256)␊ + {␊ + return super._cancel(targets, values, calldatas, descriptionHash);␊ + }␊ + ␊ + function _executor()␊ + internal␊ + view␊ + override(Governor, GovernorTimelockControl)␊ + returns (address)␊ + {␊ + return super._executor();␊ + }␊ + }␊ + `, + `import { defineConfig } from "hardhat/config";␊ + import hardhatEthers from "@nomicfoundation/hardhat-ethers";␊ + import hardhatIgnitionEthers from "@nomicfoundation/hardhat-ignition-ethers";␊ + ␊ + export default defineConfig({␊ + plugins: [hardhatEthers, hardhatIgnitionEthers],␊ + solidity: {␊ + version: "0.8.27",␊ + settings: {␊ + evmVersion: 'cancun',␊ + optimizer: {␊ + enabled: true,␊ + },␊ + },␊ + },␊ + });␊ + `, + `{␊ + "name": "hardhat-sample",␊ + "version": "0.0.1",␊ + "type": "module",␊ + "description": "",␊ + "main": "index.js",␊ + "scripts": {␊ + "compile": "hardhat compile",␊ + "test": "hardhat compile && ava"␊ + },␊ + "author": "",␊ + "license": "MIT",␊ + "devDependencies": {␊ + "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ + "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ + "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "ava": "^6.0.0",␊ + "ethers": "^6.8.1",␊ + "hardhat": "^3.6.0",␊ + "tsx": "^4.7.0",␊ + "typescript": "^5.0.0"␊ + }␊ + }`, + `import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";␊ + ␊ + export default buildModule("MyGovernorModule", (m) => {␊ + ␊ + // TODO: Set values for the constructor arguments below␊ + const myGovernor = m.contract("MyGovernor", [_token, _timelock]);␊ + ␊ + return { myGovernor };␊ + });␊ + `, + `import test from "ava";␊ + import hre from "hardhat";␊ + ␊ + const connection = await hre.network.create();␊ + const { ethers } = connection;␊ + ␊ + test.after.always(() => connection.close());␊ + ␊ + test("MyGovernor", async t => {␊ + const ContractFactory = await ethers.getContractFactory("MyGovernor");␊ + ␊ + // TODO: Set values for the variables below, then uncomment the following section:␊ + /*␊ + const _token = ...;␊ + const _timelock = ...;␊ + const instance = await ContractFactory.deploy(_token, _timelock);␊ + await instance.waitForDeployment();␊ + */␊ + ␊ + t.pass();␊ + });␊ + `, + ] + ## account ecdsa > Snapshot 1 [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Account} from "@openzeppelin/contracts/account/Account.sol";␊ @@ -608,7 +873,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ @@ -653,7 +918,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {SignerECDSAUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/cryptography/signers/SignerECDSAUpgradeable.sol";␊ @@ -712,8 +977,8 @@ Generated by [AVA](https://avajs.dev). "license": "MIT",␊ "devDependencies": {␊ "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ - "@openzeppelin/contracts": "^5.6.0",␊ - "@openzeppelin/contracts-upgradeable": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "@openzeppelin/contracts-upgradeable": "^5.7.0",␊ "@openzeppelin/hardhat-upgrades": "^4.0.2",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ @@ -814,7 +1079,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ @@ -857,7 +1122,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";␊ @@ -899,8 +1164,8 @@ Generated by [AVA](https://avajs.dev). "license": "MIT",␊ "devDependencies": {␊ "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ - "@openzeppelin/contracts": "^5.6.0",␊ - "@openzeppelin/contracts-upgradeable": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ + "@openzeppelin/contracts-upgradeable": "^5.7.0",␊ "@openzeppelin/hardhat-upgrades": "^4.0.2",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ @@ -960,7 +1225,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -1003,7 +1268,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ @@ -1046,7 +1311,7 @@ Generated by [AVA](https://avajs.dev). [ `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0␊ + // Compatible with OpenZeppelin Contracts ^5.7.0␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1096,7 +1361,7 @@ Generated by [AVA](https://avajs.dev). "@nomicfoundation/hardhat-ethers": "^4.0.2",␊ "@nomicfoundation/hardhat-ignition": "^3.0.0",␊ "@nomicfoundation/hardhat-ignition-ethers": "^3.0.0",␊ - "@openzeppelin/contracts": "^5.6.0",␊ + "@openzeppelin/contracts": "^5.7.0",␊ "ava": "^6.0.0",␊ "ethers": "^6.8.1",␊ "hardhat": "^3.6.0",␊ diff --git a/packages/core/solidity/src/zip-hardhat.test.ts.snap b/packages/core/solidity/src/zip-hardhat.test.ts.snap index 025fbac4c..ecdc9969d 100644 Binary files a/packages/core/solidity/src/zip-hardhat.test.ts.snap and b/packages/core/solidity/src/zip-hardhat.test.ts.snap differ diff --git a/packages/core/solidity/src/zip-hardhat.ts b/packages/core/solidity/src/zip-hardhat.ts index e86dcb15a..1f9eb7968 100644 --- a/packages/core/solidity/src/zip-hardhat.ts +++ b/packages/core/solidity/src/zip-hardhat.ts @@ -1,10 +1,11 @@ import JSZip from 'jszip'; import type { GenericOptions } from './build-generic'; -import type { Contract, FunctionArgument } from './contract'; +import type { Contract } from './contract'; import { printContract } from './print'; import SOLIDITY_VERSION from './solidity-version.json'; import type { Lines } from './utils/format-lines'; import { formatLinesWithSpaces, spaceBetween } from './utils/format-lines'; +import { addTodoAndCommentOut, hasNonAddressArgs, isAddressType } from './zip-shared'; class TestGenerator { constructor(private parent: HardhatZipGenerator) {} @@ -20,12 +21,8 @@ class TestGenerator { 'it("Test contract", async function () {', spaceBetween( [`const ContractFactory = await ethers.getContractFactory("${c.name}");`], - this.declareVariables(c.constructorArgs), - this.getDeployLines( - c, - c.constructorArgs.map(a => a.name), - ), - this.getExpects(opts), + ...getDeploymentSteps(c, this.parent), + this.getAssertions(c, opts), ), '});', ], @@ -40,6 +37,15 @@ class TestGenerator { ]; } + private getAssertions(c: Contract, opts?: GenericOptions): Lines[] { + if (hasNonAddressArgs(c)) { + // The deployment is commented out until the user fills in the missing constructor arguments, + // so there is no `instance` to assert against yet. + return []; + } + return this.getExpects(opts); + } + private getExpects(opts?: GenericOptions): Lines[] { if (opts !== undefined) { switch (opts.kind) { @@ -58,31 +64,27 @@ class TestGenerator { } return []; } +} - private declareVariables(args: FunctionArgument[]): Lines[] { - return args.flatMap((arg, i) => { - if (arg.type === 'address') { - return [`const ${arg.name} = (await ethers.getSigners())[${i}].address;`]; - } else { - return [`// TODO: Set the following constructor argument`, `// const ${arg.name} = ...;`]; - } - }); - } - - private getDeployLines(c: Contract, argNames: string[]): Lines[] { - if (c.constructorArgs.some(a => a.type !== 'address')) { - return [ - `// TODO: Uncomment the below when the missing constructor arguments are set above`, - `// const instance = await ${this.parent.getDeploymentCall(c, argNames)};`, - `// await instance.waitForDeployment();`, - ]; - } else { - return [ - `const instance = await ${this.parent.getDeploymentCall(c, argNames)};`, - 'await instance.waitForDeployment();', - ]; - } - } +/** + * Steps to declare the constructor arguments and deploy the contract, as groups of lines + * to be separated by blank lines. If any constructor argument cannot be given a default + * value (i.e. is not an address), the whole deployment is commented out behind a single + * TODO so that the user can fill in the values and uncomment the entire section at once. + */ +function getDeploymentSteps(c: Contract, generator: HardhatZipGenerator): Lines[][] { + const argNames = c.constructorArgs.map(a => a.name); + const declarations = c.constructorArgs.map((arg, i) => + isAddressType(arg) ? `const ${arg.name} = (await ethers.getSigners())[${i}].address;` : `const ${arg.name} = ...;`, + ); + const deployment = [ + `const instance = await ${generator.getDeploymentCall(c, argNames)};`, + 'await instance.waitForDeployment();', + ]; + if (hasNonAddressArgs(c)) { + return [addTodoAndCommentOut(c, [...declarations, ...deployment])]; + } + return [declarations, deployment]; } /** @@ -354,13 +356,11 @@ class Hardhat3TestGenerator { } private getTestCase(c: Contract, opts?: GenericOptions): Lines[] { - const argNames = c.constructorArgs.map(a => a.name); return [ `test("${c.name}", async t => {`, spaceBetween( [`const ContractFactory = await ethers.getContractFactory("${c.name}");`], - this.declareVariables(c.constructorArgs), - this.getDeployLines(c, argNames), + ...getDeploymentSteps(c, this.parent), this.getAssertions(c, opts), ), '});', @@ -368,7 +368,7 @@ class Hardhat3TestGenerator { } private getAssertions(c: Contract, opts?: GenericOptions): Lines[] { - if (c.constructorArgs.some(a => a.type !== 'address')) { + if (hasNonAddressArgs(c)) { // The deployment is commented out until the user fills in the missing constructor arguments, // so there is no `instance` to assert against yet. `t.pass()` keeps AVA happy in the meantime. return ['t.pass();']; @@ -396,31 +396,6 @@ class Hardhat3TestGenerator { } return []; } - - private declareVariables(args: FunctionArgument[]): Lines[] { - return args.flatMap((arg, i) => { - if (arg.type === 'address') { - return [`const ${arg.name} = (await ethers.getSigners())[${i}].address;`]; - } else { - return [`// TODO: Set the following constructor argument`, `// const ${arg.name} = ...;`]; - } - }); - } - - private getDeployLines(c: Contract, argNames: string[]): Lines[] { - if (c.constructorArgs.some(a => a.type !== 'address')) { - return [ - `// TODO: Uncomment the below when the missing constructor arguments are set above`, - `// const instance = await ${this.parent.getDeploymentCall(c, argNames)};`, - `// await instance.waitForDeployment();`, - ]; - } else { - return [ - `const instance = await ${this.parent.getDeploymentCall(c, argNames)};`, - 'await instance.waitForDeployment();', - ]; - } - } } /** diff --git a/packages/core/solidity/src/zip-shared.ts b/packages/core/solidity/src/zip-shared.ts new file mode 100644 index 000000000..51753f8e5 --- /dev/null +++ b/packages/core/solidity/src/zip-shared.ts @@ -0,0 +1,38 @@ +import type { Contract, FunctionArgument } from './contract'; +import type { Lines } from './utils/format-lines'; + +/** + * Whether a constructor argument can be given a default value in a generated project. + * + * The generators fill these in with a signer, so this must agree everywhere it is used: an argument + * that is treated as an address in one place but not another would leave an unset placeholder in + * code that is not commented out. + */ +export function isAddressType(arg: FunctionArgument): boolean { + return arg.type === 'address'; +} + +/** + * Whether any constructor argument cannot be given a default value in a generated project. + * + * Address arguments are filled in with a signer, so a contract with only address arguments can be + * deployed as-is. Anything else must be supplied by the user, which means the generated deployment + * is commented out and there is no deployed instance for the generated tests to assert against. + */ +export function hasNonAddressArgs(c: Contract): boolean { + return !c.constructorArgs.every(isAddressType); +} + +/** + * Comments out a section of generated code behind a single TODO, so that the user can fill in the + * missing constructor arguments and uncomment the whole section at once. + */ +export function addTodoAndCommentOut(c: Contract, lines: Lines[]): Lines[] { + const values = hasNonAddressArgs(c) ? 'values' : 'addresses'; + return [ + `// TODO: Set ${values} for the variables below, then uncomment the following section:`, + '/*', + ...lines, + '*/', + ]; +} diff --git a/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.md b/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.md index 9e36e8caf..a2ff7733f 100644 --- a/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.md +++ b/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.md @@ -9,6 +9,6 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ - '@openzeppelin/contracts/=@openzeppelin/contracts@5.6.0/', + '@openzeppelin/contracts/=@openzeppelin/contracts@5.7.0/', '@openzeppelin/uniswap-hooks/=@openzeppelin/uniswap-hooks@1.2.1/src/', ] diff --git a/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.snap b/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.snap index eb42a18b7..75e9ceb37 100644 Binary files a/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.snap and b/packages/core/uniswap-hooks/src/get-versioned-remappings.test.ts.snap differ diff --git a/packages/core/uniswap-hooks/src/hooks.test.ts.md b/packages/core/uniswap-hooks/src/hooks.test.ts.md index b99de4c39..5e5940ebd 100644 --- a/packages/core/uniswap-hooks/src/hooks.test.ts.md +++ b/packages/core/uniswap-hooks/src/hooks.test.ts.md @@ -389,7 +389,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol";␊ @@ -433,7 +433,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {SlotDerivation} from "@openzeppelin/contracts/utils/SlotDerivation.sol";␊ @@ -479,7 +479,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -524,7 +524,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -570,7 +570,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -615,7 +615,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -708,7 +708,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -788,7 +788,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -868,7 +868,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -1374,7 +1374,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol";␊ @@ -1447,7 +1447,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {SlotDerivation} from "@openzeppelin/contracts/utils/SlotDerivation.sol";␊ @@ -1522,7 +1522,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1596,7 +1596,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -1671,7 +1671,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -1745,7 +1745,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -1841,7 +1841,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -1915,7 +1915,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -1989,7 +1989,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -2060,7 +2060,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2158,7 +2158,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2264,7 +2264,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2377,7 +2377,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2515,7 +2515,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2617,7 +2617,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2718,7 +2718,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -2821,7 +2821,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -2921,7 +2921,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -3022,7 +3022,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -3122,7 +3122,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -3252,7 +3252,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -3350,7 +3350,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -3448,7 +3448,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -3543,7 +3543,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -3648,7 +3648,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -3761,7 +3761,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -3890,7 +3890,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -4035,7 +4035,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -4144,7 +4144,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -4252,7 +4252,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -4362,7 +4362,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -4469,7 +4469,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -4577,7 +4577,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -4684,7 +4684,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -4830,7 +4830,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -4935,7 +4935,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -5040,7 +5040,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -5142,7 +5142,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5243,7 +5243,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5345,7 +5345,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5438,7 +5438,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5572,7 +5572,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5677,7 +5677,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5781,7 +5781,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5887,7 +5887,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -5988,7 +5988,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -6093,7 +6093,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -6194,7 +6194,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -6308,7 +6308,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -6409,7 +6409,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -6510,7 +6510,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -6610,7 +6610,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -6700,7 +6700,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -6783,7 +6783,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -6882,7 +6882,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -7005,7 +7005,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -7099,7 +7099,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -7192,7 +7192,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -7287,7 +7287,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -7379,7 +7379,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -7472,7 +7472,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -7564,7 +7564,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -7678,7 +7678,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -7768,7 +7768,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -7858,7 +7858,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -7945,7 +7945,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8051,7 +8051,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8149,7 +8149,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8247,7 +8247,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8377,7 +8377,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8487,7 +8487,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8596,7 +8596,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -8707,7 +8707,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -8815,7 +8815,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -8924,7 +8924,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -9032,7 +9032,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -9162,7 +9162,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -9268,7 +9268,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -9374,7 +9374,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -9477,7 +9477,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -9591,7 +9591,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -9697,7 +9697,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -9794,7 +9794,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -9932,7 +9932,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -10049,7 +10049,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -10166,7 +10166,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -10285,7 +10285,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -10401,7 +10401,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -10518,7 +10518,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -10634,7 +10634,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -10767,7 +10767,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -10881,7 +10881,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -10995,7 +10995,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -11106,7 +11106,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11204,7 +11204,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11294,7 +11294,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11384,7 +11384,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11506,7 +11506,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11608,7 +11608,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11709,7 +11709,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -11812,7 +11812,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -11912,7 +11912,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -12013,7 +12013,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -12113,7 +12113,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -12235,7 +12235,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -12333,7 +12333,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -12431,7 +12431,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -12526,7 +12526,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -12635,7 +12635,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -12719,7 +12719,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -12803,7 +12803,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -12920,7 +12920,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -13033,7 +13033,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -13145,7 +13145,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -13259,7 +13259,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -13370,7 +13370,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -13482,7 +13482,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -13593,7 +13593,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -13717,7 +13717,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -13826,7 +13826,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -13935,7 +13935,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -14043,7 +14043,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14149,7 +14149,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14239,7 +14239,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14312,7 +14312,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14426,7 +14426,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14536,7 +14536,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14645,7 +14645,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -14756,7 +14756,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -14864,7 +14864,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -14973,7 +14973,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -15081,7 +15081,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -15227,7 +15227,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -15333,7 +15333,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -15439,7 +15439,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -15542,7 +15542,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -15674,7 +15674,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -15782,7 +15782,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -15898,7 +15898,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -16038,7 +16038,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -16173,7 +16173,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -16308,7 +16308,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -16445,7 +16445,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -16579,7 +16579,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -16714,7 +16714,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -16848,7 +16848,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -17023,7 +17023,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17155,7 +17155,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17284,7 +17284,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17413,7 +17413,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17522,7 +17522,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17607,7 +17607,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17692,7 +17692,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17809,7 +17809,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -17922,7 +17922,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -18034,7 +18034,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -18148,7 +18148,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -18259,7 +18259,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -18371,7 +18371,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -18482,7 +18482,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -18615,7 +18615,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -18724,7 +18724,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -18833,7 +18833,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ @@ -18941,7 +18941,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19050,7 +19050,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19135,7 +19135,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19220,7 +19220,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19337,7 +19337,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19450,7 +19450,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19562,7 +19562,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -19676,7 +19676,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -19787,7 +19787,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";␊ @@ -19899,7 +19899,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";␊ @@ -20010,7 +20010,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";␊ @@ -20143,7 +20143,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";␊ @@ -20252,7 +20252,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC1155} from "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";␊ @@ -20361,7 +20361,7 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 `// SPDX-License-Identifier: MIT␊ - // Compatible with OpenZeppelin Contracts ^5.6.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ + // Compatible with OpenZeppelin Contracts ^5.7.0 and OpenZeppelin Uniswap Hooks ^1.2.1␊ pragma solidity ^0.8.27;␊ ␊ import {ERC6909} from "@openzeppelin/contracts/token/ERC6909/ERC6909.sol";␊ diff --git a/packages/core/uniswap-hooks/src/hooks.test.ts.snap b/packages/core/uniswap-hooks/src/hooks.test.ts.snap index 4035db710..12632fdb5 100644 Binary files a/packages/core/uniswap-hooks/src/hooks.test.ts.snap and b/packages/core/uniswap-hooks/src/hooks.test.ts.snap differ diff --git a/packages/mcp/src/solidity/tools/erc1155.test.ts b/packages/mcp/src/solidity/tools/erc1155.test.ts index 33eb1d273..43ab1fade 100644 --- a/packages/mcp/src/solidity/tools/erc1155.test.ts +++ b/packages/mcp/src/solidity/tools/erc1155.test.ts @@ -47,6 +47,8 @@ test('all', async t => { mintable: true, supply: true, updatableUri: true, + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: true, access: 'roles', upgradeable: 'uups', info: { diff --git a/packages/mcp/src/solidity/tools/erc1155.ts b/packages/mcp/src/solidity/tools/erc1155.ts index f84bed410..f0ec76194 100644 --- a/packages/mcp/src/solidity/tools/erc1155.ts +++ b/packages/mcp/src/solidity/tools/erc1155.ts @@ -15,7 +15,20 @@ export function registerSolidityERC1155(server: McpServer): RegisteredTool { inputSchema: solidityERC1155Schema, title: 'Solidity ERC1155', }, - async ({ name, uri, burnable, pausable, mintable, supply, updatableUri, access, upgradeable, info }) => { + async ({ + name, + uri, + burnable, + pausable, + mintable, + supply, + updatableUri, + crossChainBridging, + crossChainLinkAllowOverride, + access, + upgradeable, + info, + }) => { const opts: ERC1155Options = { name, uri, @@ -24,6 +37,8 @@ export function registerSolidityERC1155(server: McpServer): RegisteredTool { mintable, supply, updatableUri, + crossChainBridging, + crossChainLinkAllowOverride, access, upgradeable, info, diff --git a/packages/mcp/src/solidity/tools/erc721.test.ts b/packages/mcp/src/solidity/tools/erc721.test.ts index dcec44039..8c28ac290 100644 --- a/packages/mcp/src/solidity/tools/erc721.test.ts +++ b/packages/mcp/src/solidity/tools/erc721.test.ts @@ -50,6 +50,8 @@ test('all', async t => { mintable: true, incremental: true, votes: 'blocknumber', + crossChainBridging: 'erc7786native', + crossChainLinkAllowOverride: true, access: 'roles', upgradeable: 'uups', info: { diff --git a/packages/mcp/src/solidity/tools/erc721.ts b/packages/mcp/src/solidity/tools/erc721.ts index 31f6b7b78..70508f6c5 100644 --- a/packages/mcp/src/solidity/tools/erc721.ts +++ b/packages/mcp/src/solidity/tools/erc721.ts @@ -26,6 +26,8 @@ export function registerSolidityERC721(server: McpServer): RegisteredTool { mintable, incremental, votes, + crossChainBridging, + crossChainLinkAllowOverride, access, upgradeable, namespacePrefix, @@ -42,6 +44,8 @@ export function registerSolidityERC721(server: McpServer): RegisteredTool { mintable, incremental, votes, + crossChainBridging, + crossChainLinkAllowOverride, access, upgradeable, namespacePrefix, diff --git a/packages/mcp/src/solidity/tools/governor.test.ts b/packages/mcp/src/solidity/tools/governor.test.ts index 7d5ace969..f2e3c7865 100644 --- a/packages/mcp/src/solidity/tools/governor.test.ts +++ b/packages/mcp/src/solidity/tools/governor.test.ts @@ -55,6 +55,7 @@ test('all', async t => { quorumAbsolute: '5', storage: true, settings: true, + crossChainExecution: true, upgradeable: 'uups', info: { license: 'MIT', diff --git a/packages/mcp/src/solidity/tools/governor.ts b/packages/mcp/src/solidity/tools/governor.ts index 36b694b20..22b086e95 100644 --- a/packages/mcp/src/solidity/tools/governor.ts +++ b/packages/mcp/src/solidity/tools/governor.ts @@ -30,6 +30,7 @@ export function registerSolidityGovernor(server: McpServer): RegisteredTool { quorumAbsolute, storage, settings, + crossChainExecution, upgradeable, info, }) => { @@ -48,6 +49,7 @@ export function registerSolidityGovernor(server: McpServer): RegisteredTool { quorumAbsolute, storage, settings, + crossChainExecution, upgradeable, info, }; diff --git a/packages/ui/api/ai-assistant/function-definitions/solidity.ts b/packages/ui/api/ai-assistant/function-definitions/solidity.ts index ead437d5d..5f36b6edc 100644 --- a/packages/ui/api/ai-assistant/function-definitions/solidity.ts +++ b/packages/ui/api/ai-assistant/function-definitions/solidity.ts @@ -15,6 +15,8 @@ import { enumValues, extractStringEnumValues } from '../types/helpers.ts'; import type { QuorumMode, TimelockOptions, VotesOptions } from '../../../../core/solidity/dist/governor'; import type { ClockMode } from '../../../../core/solidity/dist/set-clock-mode'; import type { CrossChainBridging } from '../../../../core/solidity/dist/erc20'; +import type { CrossChainBridging as ERC721CrossChainBridging } from '../../../../core/solidity/dist/erc721'; +import type { CrossChainBridging as ERC1155CrossChainBridging } from '../../../../core/solidity/dist/erc1155'; import type { Limitations } from '../../../../core/solidity/dist/stablecoin'; import type { ERC7579ModulesOptions, SignatureValidationOptions } from '../../../../core/solidity/dist/account'; import type { SignerOptions } from '../../../../core/solidity/dist/signer'; @@ -126,6 +128,20 @@ export const solidityERC721AIFunctionDefinition = { ], description: solidityERC721Descriptions.votes, }, + crossChainBridging: { + anyOf: [ + { type: 'boolean', enum: [false] }, + { + type: 'string', + enum: extractStringEnumValues()(['erc7786native']), + }, + ], + description: solidityERC721Descriptions.crossChainBridging, + }, + crossChainLinkAllowOverride: { + type: 'boolean', + description: solidityERC721Descriptions.crossChainLinkAllowOverride, + }, namespacePrefix: { type: 'string', description: solidityCommonDescriptions.namespacePrefix, @@ -163,6 +179,20 @@ export const solidityERC1155AIFunctionDefinition = { type: 'boolean', description: solidityERC1155Descriptions.updatableUri, }, + crossChainBridging: { + anyOf: [ + { type: 'boolean', enum: [false] }, + { + type: 'string', + enum: extractStringEnumValues()(['erc7786native']), + }, + ], + description: solidityERC1155Descriptions.crossChainBridging, + }, + crossChainLinkAllowOverride: { + type: 'boolean', + description: solidityERC1155Descriptions.crossChainLinkAllowOverride, + }, }, required: contractExactRequiredKeys<'solidity', 'ERC1155'>()(['name', 'uri']), additionalProperties: false, @@ -323,6 +353,10 @@ export const solidityGovernorAIFunctionDefinition = { type: 'boolean', description: solidityGovernorDescriptions.settings, }, + crossChainExecution: { + type: 'boolean', + description: solidityGovernorDescriptions.crossChainExecution, + }, access: { type: 'boolean', enum: [false], diff --git a/packages/ui/src/solidity/ERC1155Controls.svelte b/packages/ui/src/solidity/ERC1155Controls.svelte index fdde6398d..ec2dd909e 100644 --- a/packages/ui/src/solidity/ERC1155Controls.svelte +++ b/packages/ui/src/solidity/ERC1155Controls.svelte @@ -7,6 +7,7 @@ import AccessControlSection from './AccessControlSection.svelte'; import UpgradeabilitySection from './UpgradeabilitySection.svelte'; import InfoSection from './InfoSection.svelte'; + import ExpandableToggleRadio from '../common/ExpandableToggleRadio.svelte'; export let opts: Required = { kind: 'ERC1155', @@ -17,6 +18,8 @@ export let errors: undefined | OptionsErrorMessages; $: requireAccessControl = erc1155.isAccessControlRequired(opts); + + $: showAllowOverride = opts.crossChainBridging === 'erc7786native';
@@ -77,6 +80,34 @@
+ +
+ + + {#if showAllowOverride} +

+ + Whether to allow replacing a crosschain link that has already been registered. +

+ {/if} +
+
+ diff --git a/packages/ui/src/solidity/ERC20Controls.svelte b/packages/ui/src/solidity/ERC20Controls.svelte index d46ad6698..6f20fab3c 100644 --- a/packages/ui/src/solidity/ERC20Controls.svelte +++ b/packages/ui/src/solidity/ERC20Controls.svelte @@ -51,10 +51,7 @@ showChainId = opts.premint !== '' && opts.premint !== '0' && opts.crossChainBridging !== false; } - let showAllowOverride = false; - $: { - showAllowOverride = opts.crossChainBridging === 'erc7786native'; - } + $: showAllowOverride = opts.crossChainBridging === 'erc7786native';
diff --git a/packages/ui/src/solidity/ERC721Controls.svelte b/packages/ui/src/solidity/ERC721Controls.svelte index fd9878875..66cff372a 100644 --- a/packages/ui/src/solidity/ERC721Controls.svelte +++ b/packages/ui/src/solidity/ERC721Controls.svelte @@ -9,6 +9,10 @@ import InfoSection from './InfoSection.svelte'; import ExpandableToggleRadio from '../common/ExpandableToggleRadio.svelte'; + import tippy, { type Instance as TippyInstance } from 'tippy.js'; + import { onMount } from 'svelte'; + import { crosschainIncrementalTooltipProps } from './crosschain-incremental-tooltip'; + export let opts: Required = { kind: 'ERC721', ...erc721.defaults, @@ -34,6 +38,32 @@ } $: requireAccessControl = erc721.isAccessControlRequired(opts); + + // Show notice when Auto Increment Ids is combined with Cross-Chain Bridging + let incrementalLabel: HTMLElement; + let bridgingLabel: HTMLElement; + let incrementalTooltip: TippyInstance | undefined; + let bridgingTooltip: TippyInstance | undefined; + onMount(() => { + incrementalTooltip = tippy(incrementalLabel, crosschainIncrementalTooltipProps); + bridgingTooltip = tippy(bridgingLabel, crosschainIncrementalTooltipProps); + }); + + let hadIncremental = opts.incremental; + let hadCrossChainBridging = opts.crossChainBridging; + $: { + if (opts.incremental && opts.crossChainBridging === 'erc7786native') { + if (!hadIncremental) { + incrementalTooltip?.show(); + } else if (hadCrossChainBridging === false) { + bridgingTooltip?.show(); + } + } + hadIncremental = opts.incremental; + hadCrossChainBridging = opts.crossChainBridging; + } + + $: showAllowOverride = opts.crossChainBridging === 'erc7786native';
@@ -67,7 +97,7 @@ Mintable Privileged accounts will be able to emit new tokens. -