ERC721ReceiverMock.sol 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.20;
  3. import {IERC721Receiver} from "../../token/ERC721/IERC721Receiver.sol";
  4. contract ERC721ReceiverMock is IERC721Receiver {
  5. enum RevertType {
  6. None,
  7. RevertWithoutMessage,
  8. RevertWithMessage,
  9. RevertWithCustomError,
  10. Panic
  11. }
  12. bytes4 private immutable _retval;
  13. RevertType private immutable _error;
  14. event Received(address operator, address from, uint256 tokenId, bytes data, uint256 gas);
  15. error CustomError(bytes4);
  16. constructor(bytes4 retval, RevertType error) {
  17. _retval = retval;
  18. _error = error;
  19. }
  20. function onERC721Received(
  21. address operator,
  22. address from,
  23. uint256 tokenId,
  24. bytes memory data
  25. ) public returns (bytes4) {
  26. if (_error == RevertType.RevertWithoutMessage) {
  27. revert();
  28. } else if (_error == RevertType.RevertWithMessage) {
  29. revert("ERC721ReceiverMock: reverting");
  30. } else if (_error == RevertType.RevertWithCustomError) {
  31. revert CustomError(_retval);
  32. } else if (_error == RevertType.Panic) {
  33. uint256 a = uint256(0) / uint256(0);
  34. a;
  35. }
  36. emit Received(operator, from, tokenId, data, gasleft());
  37. return _retval;
  38. }
  39. }