DummyERC20Impl.sol 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // SPDX-License-Identifier: agpl-3.0
  2. pragma solidity ^0.8.0;
  3. // with mint
  4. contract DummyERC20Impl {
  5. uint256 t;
  6. mapping (address => uint256) b;
  7. mapping (address => mapping (address => uint256)) a;
  8. string public name;
  9. string public symbol;
  10. uint public decimals;
  11. function myAddress() public returns (address) {
  12. return address(this);
  13. }
  14. function add(uint a, uint b) internal pure returns (uint256) {
  15. uint c = a +b;
  16. require (c >= a);
  17. return c;
  18. }
  19. function sub(uint a, uint b) internal pure returns (uint256) {
  20. require (a>=b);
  21. return a-b;
  22. }
  23. function totalSupply() external view returns (uint256) {
  24. return t;
  25. }
  26. function balanceOf(address account) external view returns (uint256) {
  27. return b[account];
  28. }
  29. function transfer(address recipient, uint256 amount) external returns (bool) {
  30. b[msg.sender] = sub(b[msg.sender], amount);
  31. b[recipient] = add(b[recipient], amount);
  32. return true;
  33. }
  34. function allowance(address owner, address spender) external view returns (uint256) {
  35. return a[owner][spender];
  36. }
  37. function approve(address spender, uint256 amount) external returns (bool) {
  38. a[msg.sender][spender] = amount;
  39. return true;
  40. }
  41. function transferFrom(
  42. address sender,
  43. address recipient,
  44. uint256 amount
  45. ) external returns (bool) {
  46. b[sender] = sub(b[sender], amount);
  47. b[recipient] = add(b[recipient], amount);
  48. a[sender][msg.sender] = sub(a[sender][msg.sender], amount);
  49. return true;
  50. }
  51. }