ERC721ReceiverMock.sol 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  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(address operator, address from, uint256 tokenId, bytes memory data)
  19. public override returns (bytes4)
  20. {
  21. if (_error == Error.RevertWithMessage) {
  22. revert("ERC721ReceiverMock: reverting");
  23. } else if (_error == Error.RevertWithoutMessage) {
  24. revert();
  25. } else if (_error == Error.Panic) {
  26. uint256 a = uint256(0) / uint256(0);
  27. a;
  28. }
  29. emit Received(operator, from, tokenId, data, gasleft());
  30. return _retval;
  31. }
  32. }