Skip to content

Commit

Permalink
assembly version
Browse files Browse the repository at this point in the history
  • Loading branch information
RenanSouza2 committed Apr 18, 2023
1 parent d43ff2d commit 1b3190b
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions contracts/token/ERC1155/ERC1155.sol
Original file line number Diff line number Diff line change
Expand Up @@ -207,8 +207,9 @@ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
function _safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data) internal {
require(to != address(0), "ERC1155: transfer to the zero address");
require(from != address(0), "ERC1155: transfer from the zero address");
uint256[] memory ids = _asSingletonArray(id);
uint256[] memory amounts = _asSingletonArray(amount);
uint256[] memory ids;
uint256[] memory amounts;
(ids, amounts) = _asSingletonArrays(id, amount);
_update(from, to, ids, amounts, data);
}

Expand Down Expand Up @@ -383,4 +384,23 @@ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {

return array;
}

function _asSingletonArrays(uint256 element1, uint256 element2) private pure returns (uint256[] memory, uint256[] memory) {
uint256[] memory array1;
uint256[] memory array2;

assembly {
array1 := mload(0x40)
mstore(array1, 1)
mstore(add(array1, 0x20), element1)

array2 := add(array1, 0x40)
mstore(array2, 1)
mstore(add(array2, 0x20), element2)

mstore(0x40, add(array2, 0x40))
}

return (array1, array2);
}
}

0 comments on commit 1b3190b

Please sign in to comment.