diff --git a/packages/contracts-bedrock/contracts/L2/L2ERC721Bridge.sol b/packages/contracts-bedrock/contracts/L2/L2ERC721Bridge.sol index 1affb72c3ebae..e3b1ed1b69ae7 100644 --- a/packages/contracts-bedrock/contracts/L2/L2ERC721Bridge.sol +++ b/packages/contracts-bedrock/contracts/L2/L2ERC721Bridge.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.15; import { ERC721Bridge } from "../universal/ERC721Bridge.sol"; import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { L1ERC721Bridge } from "../L1/L1ERC721Bridge.sol"; -import { IOptimismMintableERC721 } from "../universal/IOptimismMintableERC721.sol"; +import { IOptimismMintableERC721 } from "../universal/SupportedInterfaces.sol"; import { Semver } from "../universal/Semver.sol"; /** diff --git a/packages/contracts-bedrock/contracts/universal/IOptimismMintableERC721.sol b/packages/contracts-bedrock/contracts/universal/IOptimismMintableERC721.sol deleted file mode 100644 index 1285e325158c6..0000000000000 --- a/packages/contracts-bedrock/contracts/universal/IOptimismMintableERC721.sol +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import { - IERC721Enumerable -} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; - -/** - * @title IOptimismMintableERC721 - * @notice Interface for contracts that are compatible with the OptimismMintableERC721 standard. - * Tokens that follow this standard can be easily transferred across the ERC721 bridge. - */ -interface IOptimismMintableERC721 is IERC721Enumerable { - /** - * @notice Emitted when a token is minted. - * - * @param account Address of the account the token was minted to. - * @param tokenId Token ID of the minted token. - */ - event Mint(address indexed account, uint256 tokenId); - - /** - * @notice Emitted when a token is burned. - * - * @param account Address of the account the token was burned from. - * @param tokenId Token ID of the burned token. - */ - event Burn(address indexed account, uint256 tokenId); - - /** - * @notice Mints some token ID for a user, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * @param _to Address of the user to mint the token for. - * @param _tokenId Token ID to mint. - */ - function safeMint(address _to, uint256 _tokenId) external; - - /** - * @notice Burns a token ID from a user. - * - * @param _from Address of the user to burn the token from. - * @param _tokenId Token ID to burn. - */ - function burn(address _from, uint256 _tokenId) external; - - /** - * @notice Chain ID of the chain where the remote token is deployed. - */ - function REMOTE_CHAIN_ID() external view returns (uint256); - - /** - * @notice Address of the token on the remote domain. - */ - function REMOTE_TOKEN() external view returns (address); - - /** - * @notice Address of the ERC721 bridge on this network. - */ - function BRIDGE() external view returns (address); - - /** - * @notice Chain ID of the chain where the remote token is deployed. - */ - function remoteChainId() external view returns (uint256); - - /** - * @notice Address of the token on the remote domain. - */ - function remoteToken() external view returns (address); - - /** - * @notice Address of the ERC721 bridge on this network. - */ - function bridge() external view returns (address); -} diff --git a/packages/contracts-bedrock/contracts/universal/OptimismMintableERC721.sol b/packages/contracts-bedrock/contracts/universal/OptimismMintableERC721.sol index f34b2c6a0b566..753187acd2853 100644 --- a/packages/contracts-bedrock/contracts/universal/OptimismMintableERC721.sol +++ b/packages/contracts-bedrock/contracts/universal/OptimismMintableERC721.sol @@ -7,7 +7,7 @@ import { import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; -import { IOptimismMintableERC721 } from "./IOptimismMintableERC721.sol"; +import { IOptimismMintableERC721 } from "./SupportedInterfaces.sol"; /** * @title OptimismMintableERC721 diff --git a/packages/contracts-bedrock/contracts/universal/SupportedInterfaces.sol b/packages/contracts-bedrock/contracts/universal/SupportedInterfaces.sol index 9a55f1ed89316..6c96fa641f627 100644 --- a/packages/contracts-bedrock/contracts/universal/SupportedInterfaces.sol +++ b/packages/contracts-bedrock/contracts/universal/SupportedInterfaces.sol @@ -3,6 +3,9 @@ pragma solidity ^0.8.0; // Import this here to make it available just by importing this file import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { + IERC721Enumerable +} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; /** * @title IOptimismMintableERC20 @@ -33,3 +36,73 @@ interface ILegacyMintableERC20 { function burn(address _from, uint256 _amount) external; } + +/** + * @title IOptimismMintableERC721 + * @notice Interface for contracts that are compatible with the OptimismMintableERC721 standard. + * Tokens that follow this standard can be easily transferred across the ERC721 bridge. + */ +interface IOptimismMintableERC721 is IERC721Enumerable { + /** + * @notice Emitted when a token is minted. + * + * @param account Address of the account the token was minted to. + * @param tokenId Token ID of the minted token. + */ + event Mint(address indexed account, uint256 tokenId); + + /** + * @notice Emitted when a token is burned. + * + * @param account Address of the account the token was burned from. + * @param tokenId Token ID of the burned token. + */ + event Burn(address indexed account, uint256 tokenId); + + /** + * @notice Mints some token ID for a user, checking first that contract recipients + * are aware of the ERC721 protocol to prevent tokens from being forever locked. + * + * @param _to Address of the user to mint the token for. + * @param _tokenId Token ID to mint. + */ + function safeMint(address _to, uint256 _tokenId) external; + + /** + * @notice Burns a token ID from a user. + * + * @param _from Address of the user to burn the token from. + * @param _tokenId Token ID to burn. + */ + function burn(address _from, uint256 _tokenId) external; + + /** + * @notice Chain ID of the chain where the remote token is deployed. + */ + function REMOTE_CHAIN_ID() external view returns (uint256); + + /** + * @notice Address of the token on the remote domain. + */ + function REMOTE_TOKEN() external view returns (address); + + /** + * @notice Address of the ERC721 bridge on this network. + */ + function BRIDGE() external view returns (address); + + /** + * @notice Chain ID of the chain where the remote token is deployed. + */ + function remoteChainId() external view returns (uint256); + + /** + * @notice Address of the token on the remote domain. + */ + function remoteToken() external view returns (address); + + /** + * @notice Address of the ERC721 bridge on this network. + */ + function bridge() external view returns (address); +}