ERC1363SpenderMock.sol 1.3 KB

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