ERC1155ReceiverMock.sol 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.19;
  3. import "../../token/ERC1155/IERC1155Receiver.sol";
  4. import "../../utils/introspection/ERC165.sol";
  5. contract ERC1155ReceiverMock is ERC165, IERC1155Receiver {
  6. enum RevertType {
  7. None,
  8. Empty,
  9. String,
  10. Custom
  11. }
  12. bytes4 private _recRetval;
  13. RevertType private _recReverts;
  14. bytes4 private _batRetval;
  15. RevertType private _batReverts;
  16. event Received(address operator, address from, uint256 id, uint256 value, bytes data, uint256 gas);
  17. event BatchReceived(address operator, address from, uint256[] ids, uint256[] values, bytes data, uint256 gas);
  18. error ERC1155ReceiverMockError();
  19. constructor(bytes4 recRetval, RevertType recReverts, bytes4 batRetval, RevertType batReverts) {
  20. _recRetval = recRetval;
  21. _recReverts = recReverts;
  22. _batRetval = batRetval;
  23. _batReverts = batReverts;
  24. }
  25. function onERC1155Received(
  26. address operator,
  27. address from,
  28. uint256 id,
  29. uint256 value,
  30. bytes calldata data
  31. ) external returns (bytes4) {
  32. if (_recReverts == RevertType.Empty) {
  33. revert();
  34. } else if (_recReverts == RevertType.String) {
  35. revert("ERC1155ReceiverMock: reverting on receive");
  36. } else if (_recReverts == RevertType.Custom) {
  37. revert ERC1155ReceiverMockError();
  38. }
  39. emit Received(operator, from, id, value, data, gasleft());
  40. return _recRetval;
  41. }
  42. function onERC1155BatchReceived(
  43. address operator,
  44. address from,
  45. uint256[] calldata ids,
  46. uint256[] calldata values,
  47. bytes calldata data
  48. ) external returns (bytes4) {
  49. if (_batReverts == RevertType.Empty) {
  50. revert();
  51. } else if (_batReverts == RevertType.String) {
  52. revert("ERC1155ReceiverMock: reverting on batch receive");
  53. } else if (_batReverts == RevertType.Custom) {
  54. revert ERC1155ReceiverMockError();
  55. }
  56. emit BatchReceived(operator, from, ids, values, data, gasleft());
  57. return _batRetval;
  58. }
  59. }