SafeERC20Helper.sol 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. pragma solidity ^0.4.24;
  2. import "../token/ERC20/IERC20.sol";
  3. import "../token/ERC20/SafeERC20.sol";
  4. contract ERC20FailingMock is IERC20 {
  5. function totalSupply() public view returns (uint256) {
  6. return 0;
  7. }
  8. function transfer(address, uint256) public returns (bool) {
  9. return false;
  10. }
  11. function transferFrom(address, address, uint256) public returns (bool) {
  12. return false;
  13. }
  14. function approve(address, uint256) public returns (bool) {
  15. return false;
  16. }
  17. function balanceOf(address) public view returns (uint256) {
  18. return 0;
  19. }
  20. function allowance(address, address) public view returns (uint256) {
  21. return 0;
  22. }
  23. }
  24. contract ERC20SucceedingMock is IERC20 {
  25. function totalSupply() public view returns (uint256) {
  26. return 0;
  27. }
  28. function transfer(address, uint256) public returns (bool) {
  29. return true;
  30. }
  31. function transferFrom(address, address, uint256) public returns (bool) {
  32. return true;
  33. }
  34. function approve(address, uint256) public returns (bool) {
  35. return true;
  36. }
  37. function balanceOf(address) public view returns (uint256) {
  38. return 0;
  39. }
  40. function allowance(address, address) public view returns (uint256) {
  41. return 0;
  42. }
  43. }
  44. contract SafeERC20Helper {
  45. using SafeERC20 for IERC20;
  46. IERC20 private _failing;
  47. IERC20 private _succeeding;
  48. constructor() public {
  49. _failing = new ERC20FailingMock();
  50. _succeeding = new ERC20SucceedingMock();
  51. }
  52. function doFailingTransfer() public {
  53. _failing.safeTransfer(address(0), 0);
  54. }
  55. function doFailingTransferFrom() public {
  56. _failing.safeTransferFrom(address(0), address(0), 0);
  57. }
  58. function doFailingApprove() public {
  59. _failing.safeApprove(address(0), 0);
  60. }
  61. function doSucceedingTransfer() public {
  62. _succeeding.safeTransfer(address(0), 0);
  63. }
  64. function doSucceedingTransferFrom() public {
  65. _succeeding.safeTransferFrom(address(0), address(0), 0);
  66. }
  67. function doSucceedingApprove() public {
  68. _succeeding.safeApprove(address(0), 0);
  69. }
  70. }