From 5444195f5c420c5e0155244200b96cbe56275b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Coffee=E2=98=95=EF=B8=8F?= Date: Tue, 13 May 2025 23:21:57 -0400 Subject: [PATCH 1/6] feat: add ERC7572 interface for contracts that expose contract level metadata --- contracts/interfaces/draft-IERC7572.sol | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 contracts/interfaces/draft-IERC7572.sol diff --git a/contracts/interfaces/draft-IERC7572.sol b/contracts/interfaces/draft-IERC7572.sol new file mode 100644 index 00000000000..e61d06f00eb --- /dev/null +++ b/contracts/interfaces/draft-IERC7572.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v5.3.0) (interfaces/draft-IERC7572.sol) + +pragma solidity ^0.8.20; + +/// @title ERC-7572 Contract Level Metadata +/// @dev Required interface of an ERC-7572 compliant contract, as defined in the +/// https://eips.ethereum.org/EIPS/eip-7572[ERC]. +interface IERC7572 { + + /// @dev This event should be emitted on updates to the contract metadata + /// to indicate to offchain indexers that they should query the contract + /// for the latest URI. + event ContractURIUpdated(); + + /// @dev Returns an offchain resource for contract metadata or onchain JSON + /// data string (data:application/json;utf8,{}). + function contractURI() external view returns (string memory); +} From 021c3244a241d5dbc09fef67cd7c8739bcf947f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Coffee=E2=98=95=EF=B8=8F?= Date: Tue, 13 May 2025 23:29:39 -0400 Subject: [PATCH 2/6] add changeset --- .changeset/fluffy-bananas-add.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fluffy-bananas-add.md diff --git a/.changeset/fluffy-bananas-add.md b/.changeset/fluffy-bananas-add.md new file mode 100644 index 00000000000..8fdee58f878 --- /dev/null +++ b/.changeset/fluffy-bananas-add.md @@ -0,0 +1,5 @@ +--- +'openzeppelin-solidity': patch +--- + +Add draft ERC-7572 interface From bf047f82cdf32fc180ad48300201375802b0e3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Coffee=E2=98=95=EF=B8=8F?= Date: Tue, 13 May 2025 23:48:49 -0400 Subject: [PATCH 3/6] lint --- contracts/interfaces/draft-IERC7572.sol | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/contracts/interfaces/draft-IERC7572.sol b/contracts/interfaces/draft-IERC7572.sol index e61d06f00eb..a3dff931a53 100644 --- a/contracts/interfaces/draft-IERC7572.sol +++ b/contracts/interfaces/draft-IERC7572.sol @@ -7,13 +7,12 @@ pragma solidity ^0.8.20; /// @dev Required interface of an ERC-7572 compliant contract, as defined in the /// https://eips.ethereum.org/EIPS/eip-7572[ERC]. interface IERC7572 { + /// @dev This event should be emitted on updates to the contract metadata + /// to indicate to offchain indexers that they should query the contract + /// for the latest URI. + event ContractURIUpdated(); - /// @dev This event should be emitted on updates to the contract metadata - /// to indicate to offchain indexers that they should query the contract - /// for the latest URI. - event ContractURIUpdated(); - - /// @dev Returns an offchain resource for contract metadata or onchain JSON - /// data string (data:application/json;utf8,{}). - function contractURI() external view returns (string memory); + /// @dev Returns an offchain resource for contract metadata or onchain JSON + /// data string (data:application/json;utf8,{}). + function contractURI() external view returns (string memory); } From 17b4768ff9e12ff1c70213835f2cd5348d0d421d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Coffee=E2=98=95=EF=B8=8F?= Date: Sun, 18 May 2025 15:49:22 -0400 Subject: [PATCH 4/6] empty: rerun halmos From d048008686e426bc2ae18ca9044db27bb17ab41c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ernesto=20Garc=C3=ADa?= Date: Sat, 24 May 2025 09:08:26 -0600 Subject: [PATCH 5/6] Update .changeset/fluffy-bananas-add.md --- .changeset/fluffy-bananas-add.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fluffy-bananas-add.md b/.changeset/fluffy-bananas-add.md index 8fdee58f878..2bc4d6a61c3 100644 --- a/.changeset/fluffy-bananas-add.md +++ b/.changeset/fluffy-bananas-add.md @@ -2,4 +2,4 @@ 'openzeppelin-solidity': patch --- -Add draft ERC-7572 interface +`IERC7572`: Add interface to support contract-level metadata. From dc731cd027c800927c063045ece334e6fd4e620b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Coffee=E2=98=95=EF=B8=8F?= Date: Sun, 25 May 2025 17:08:26 -0400 Subject: [PATCH 6/6] update `IERC6909ContentURI` and `ERC6909ContentURI` to implement `IERC7572` --- contracts/interfaces/draft-IERC6909.sol | 8 ++------ .../token/ERC6909/extensions/draft-ERC6909ContentURI.sol | 6 ++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/contracts/interfaces/draft-IERC6909.sol b/contracts/interfaces/draft-IERC6909.sol index c6d550d6536..0feafc380dd 100644 --- a/contracts/interfaces/draft-IERC6909.sol +++ b/contracts/interfaces/draft-IERC6909.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.20; import {IERC165} from "../utils/introspection/IERC165.sol"; +import {IERC7572} from "./draft-IERC7572.sol"; /** * @dev Required interface of an ERC-6909 compliant contract, as defined in the @@ -102,12 +103,7 @@ interface IERC6909Metadata is IERC6909 { /** * @dev Optional extension of {IERC6909} that adds content URI functions. */ -interface IERC6909ContentURI is IERC6909 { - /** - * @dev Returns URI for the contract. - */ - function contractURI() external view returns (string memory); - +interface IERC6909ContentURI is IERC6909, IERC7572 { /** * @dev Returns the URI for the token of type `id`. */ diff --git a/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol b/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol index 9d082c06664..d9a1ebb11e5 100644 --- a/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol +++ b/contracts/token/ERC6909/extensions/draft-ERC6909ContentURI.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.20; import {ERC6909} from "../draft-ERC6909.sol"; +import {IERC7572} from "../../../interfaces/draft-IERC7572.sol"; import {IERC6909ContentURI} from "../../../interfaces/draft-IERC6909.sol"; /** @@ -13,13 +14,10 @@ contract ERC6909ContentURI is ERC6909, IERC6909ContentURI { string private _contractURI; mapping(uint256 id => string) private _tokenURIs; - /// @dev Event emitted when the contract URI is changed. See https://eips.ethereum.org/EIPS/eip-7572[ERC-7572] for details. - event ContractURIUpdated(); - /// @dev See {IERC1155-URI} event URI(string value, uint256 indexed id); - /// @inheritdoc IERC6909ContentURI + /// @inheritdoc IERC7572 function contractURI() public view virtual override returns (string memory) { return _contractURI; }