Skip to content

Commit f84fde8

Browse files
letmehateuernestognwAmxx
authored
Introduce _checkAuthorized in ERC1155 to perform operator checks (#6133)
Co-authored-by: ernestognw <[email protected]> Co-authored-by: Hadrien Croubois <[email protected]>
1 parent bacb570 commit f84fde8

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

.changeset/social-tools-sniff.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'openzeppelin-solidity': minor
3+
---
4+
5+
`ERC1155`: Introduce the `_checkAuthorized` internal virtual function to encapsulate `isApprovedForAll` and `msg.sender == from` checks.

contracts/token/ERC1155/ERC1155.sol

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,7 @@ abstract contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI, IER
9797

9898
/// @inheritdoc IERC1155
9999
function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes memory data) public virtual {
100-
address sender = _msgSender();
101-
if (from != sender && !isApprovedForAll(from, sender)) {
102-
revert ERC1155MissingApprovalForAll(sender, from);
103-
}
100+
_checkAuthorized(_msgSender(), from);
104101
_safeTransferFrom(from, to, id, value, data);
105102
}
106103

@@ -112,13 +109,17 @@ abstract contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI, IER
112109
uint256[] memory values,
113110
bytes memory data
114111
) public virtual {
115-
address sender = _msgSender();
116-
if (from != sender && !isApprovedForAll(from, sender)) {
117-
revert ERC1155MissingApprovalForAll(sender, from);
118-
}
112+
_checkAuthorized(_msgSender(), from);
119113
_safeBatchTransferFrom(from, to, ids, values, data);
120114
}
121115

116+
/// @dev Checks if `operator` is authorized to transfer tokens owned by `owner`. Reverts with {ERC1155MissingApprovalForAll} if not.
117+
function _checkAuthorized(address operator, address owner) internal view virtual {
118+
if (owner != operator && !isApprovedForAll(owner, operator)) {
119+
revert ERC1155MissingApprovalForAll(operator, owner);
120+
}
121+
}
122+
122123
/**
123124
* @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. Will mint (or burn) if `from`
124125
* (or `to`) is the zero address.

0 commit comments

Comments
 (0)