ERC721ReceiverMock.sol 1.1 KB

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