ERC1363ReceiverMock.sol 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {IERC1363Receiver} from "../../interfaces/IERC1363Receiver.sol";
  4. contract ERC1363ReceiverMock is IERC1363Receiver {
  5. enum RevertType {
  6. None,
  7. RevertWithoutMessage,
  8. RevertWithMessage,
  9. RevertWithCustomError,
  10. Panic
  11. }
  12. bytes4 private _retval;
  13. RevertType private _error;
  14. event Received(address operator, address from, uint256 value, bytes data);
  15. error CustomError(bytes4);
  16. constructor() {
  17. _retval = IERC1363Receiver.onTransferReceived.selector;
  18. _error = RevertType.None;
  19. }
  20. function setUp(bytes4 retval, RevertType error) public {
  21. _retval = retval;
  22. _error = error;
  23. }
  24. function onTransferReceived(
  25. address operator,
  26. address from,
  27. uint256 value,
  28. bytes calldata data
  29. ) external override returns (bytes4) {
  30. if (_error == RevertType.RevertWithoutMessage) {
  31. revert();
  32. } else if (_error == RevertType.RevertWithMessage) {
  33. revert("ERC1363ReceiverMock: reverting");
  34. } else if (_error == RevertType.RevertWithCustomError) {
  35. revert CustomError(_retval);
  36. } else if (_error == RevertType.Panic) {
  37. uint256 a = uint256(0) / uint256(0);
  38. a;
  39. }
  40. emit Received(operator, from, value, data);
  41. return _retval;
  42. }
  43. }