|
@@ -130,11 +130,57 @@ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
|
|
virtual
|
|
virtual
|
|
override
|
|
override
|
|
{
|
|
{
|
|
- require(to != address(0), "ERC1155: transfer to the zero address");
|
|
|
|
require(
|
|
require(
|
|
from == _msgSender() || isApprovedForAll(from, _msgSender()),
|
|
from == _msgSender() || isApprovedForAll(from, _msgSender()),
|
|
"ERC1155: caller is not owner nor approved"
|
|
"ERC1155: caller is not owner nor approved"
|
|
);
|
|
);
|
|
|
|
+ _safeTransferFrom(from, to, id, amount, data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @dev See {IERC1155-safeBatchTransferFrom}.
|
|
|
|
+ */
|
|
|
|
+ function safeBatchTransferFrom(
|
|
|
|
+ address from,
|
|
|
|
+ address to,
|
|
|
|
+ uint256[] memory ids,
|
|
|
|
+ uint256[] memory amounts,
|
|
|
|
+ bytes memory data
|
|
|
|
+ )
|
|
|
|
+ public
|
|
|
|
+ virtual
|
|
|
|
+ override
|
|
|
|
+ {
|
|
|
|
+ require(
|
|
|
|
+ from == _msgSender() || isApprovedForAll(from, _msgSender()),
|
|
|
|
+ "ERC1155: transfer caller is not owner nor approved"
|
|
|
|
+ );
|
|
|
|
+ _safeBatchTransferFrom(from, to, ids, amounts, data);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
|
|
|
|
+ *
|
|
|
|
+ * Emits a {TransferSingle} event.
|
|
|
|
+ *
|
|
|
|
+ * Requirements:
|
|
|
|
+ *
|
|
|
|
+ * - `to` cannot be the zero address.
|
|
|
|
+ * - `from` must have a balance of tokens of type `id` of at least `amount`.
|
|
|
|
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
|
|
|
|
+ * acceptance magic value.
|
|
|
|
+ */
|
|
|
|
+ function _safeTransferFrom(
|
|
|
|
+ address from,
|
|
|
|
+ address to,
|
|
|
|
+ uint256 id,
|
|
|
|
+ uint256 amount,
|
|
|
|
+ bytes memory data
|
|
|
|
+ )
|
|
|
|
+ internal
|
|
|
|
+ virtual
|
|
|
|
+ {
|
|
|
|
+ require(to != address(0), "ERC1155: transfer to the zero address");
|
|
|
|
|
|
address operator = _msgSender();
|
|
address operator = _msgSender();
|
|
|
|
|
|
@@ -151,25 +197,27 @@ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * @dev See {IERC1155-safeBatchTransferFrom}.
|
|
|
|
|
|
+ * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
|
|
|
|
+ *
|
|
|
|
+ * Emits a {TransferBatch} event.
|
|
|
|
+ *
|
|
|
|
+ * Requirements:
|
|
|
|
+ *
|
|
|
|
+ * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
|
|
|
|
+ * acceptance magic value.
|
|
*/
|
|
*/
|
|
- function safeBatchTransferFrom(
|
|
|
|
|
|
+ function _safeBatchTransferFrom(
|
|
address from,
|
|
address from,
|
|
address to,
|
|
address to,
|
|
uint256[] memory ids,
|
|
uint256[] memory ids,
|
|
uint256[] memory amounts,
|
|
uint256[] memory amounts,
|
|
bytes memory data
|
|
bytes memory data
|
|
)
|
|
)
|
|
- public
|
|
|
|
|
|
+ internal
|
|
virtual
|
|
virtual
|
|
- override
|
|
|
|
{
|
|
{
|
|
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
|
|
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
|
|
require(to != address(0), "ERC1155: transfer to the zero address");
|
|
require(to != address(0), "ERC1155: transfer to the zero address");
|
|
- require(
|
|
|
|
- from == _msgSender() || isApprovedForAll(from, _msgSender()),
|
|
|
|
- "ERC1155: transfer caller is not owner nor approved"
|
|
|
|
- );
|
|
|
|
|
|
|
|
address operator = _msgSender();
|
|
address operator = _msgSender();
|
|
|
|
|