ERC1155ReceiverMock.sol 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.0;
  3. import "../token/ERC1155/IERC1155Receiver.sol";
  4. import "../utils/introspection/ERC165.sol";
  5. contract ERC1155ReceiverMock is ERC165, IERC1155Receiver {
  6. bytes4 private _recRetval;
  7. bool private _recReverts;
  8. bytes4 private _batRetval;
  9. bool private _batReverts;
  10. event Received(address operator, address from, uint256 id, uint256 value, bytes data, uint256 gas);
  11. event BatchReceived(address operator, address from, uint256[] ids, uint256[] values, bytes data, uint256 gas);
  12. constructor(
  13. bytes4 recRetval,
  14. bool recReverts,
  15. bytes4 batRetval,
  16. bool batReverts
  17. ) {
  18. _recRetval = recRetval;
  19. _recReverts = recReverts;
  20. _batRetval = batRetval;
  21. _batReverts = batReverts;
  22. }
  23. function onERC1155Received(
  24. address operator,
  25. address from,
  26. uint256 id,
  27. uint256 value,
  28. bytes calldata data
  29. ) external override returns (bytes4) {
  30. require(!_recReverts, "ERC1155ReceiverMock: reverting on receive");
  31. emit Received(operator, from, id, value, data, gasleft());
  32. return _recRetval;
  33. }
  34. function onERC1155BatchReceived(
  35. address operator,
  36. address from,
  37. uint256[] calldata ids,
  38. uint256[] calldata values,
  39. bytes calldata data
  40. ) external override returns (bytes4) {
  41. require(!_batReverts, "ERC1155ReceiverMock: reverting on batch receive");
  42. emit BatchReceived(operator, from, ids, values, data, gasleft());
  43. return _batRetval;
  44. }
  45. }