draft-IERC6909.sol 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // SPDX-License-Identifier: MIT
  2. // OpenZeppelin Contracts (last updated v5.3.0) (interfaces/draft-IERC6909.sol)
  3. pragma solidity ^0.8.20;
  4. import {IERC165} from "../utils/introspection/IERC165.sol";
  5. /**
  6. * @dev Required interface of an ERC-6909 compliant contract, as defined in the
  7. * https://eips.ethereum.org/EIPS/eip-6909[ERC].
  8. */
  9. interface IERC6909 is IERC165 {
  10. /**
  11. * @dev Emitted when the allowance of a `spender` for an `owner` is set for a token of type `id`.
  12. * The new allowance is `amount`.
  13. */
  14. event Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount);
  15. /**
  16. * @dev Emitted when `owner` grants or revokes operator status for a `spender`.
  17. */
  18. event OperatorSet(address indexed owner, address indexed spender, bool approved);
  19. /**
  20. * @dev Emitted when `amount` tokens of type `id` are moved from `sender` to `receiver` initiated by `caller`.
  21. */
  22. event Transfer(
  23. address caller,
  24. address indexed sender,
  25. address indexed receiver,
  26. uint256 indexed id,
  27. uint256 amount
  28. );
  29. /**
  30. * @dev Returns the amount of tokens of type `id` owned by `owner`.
  31. */
  32. function balanceOf(address owner, uint256 id) external view returns (uint256);
  33. /**
  34. * @dev Returns the amount of tokens of type `id` that `spender` is allowed to spend on behalf of `owner`.
  35. *
  36. * NOTE: Does not include operator allowances.
  37. */
  38. function allowance(address owner, address spender, uint256 id) external view returns (uint256);
  39. /**
  40. * @dev Returns true if `spender` is set as an operator for `owner`.
  41. */
  42. function isOperator(address owner, address spender) external view returns (bool);
  43. /**
  44. * @dev Sets an approval to `spender` for `amount` of tokens of type `id` from the caller's tokens. An `amount` of
  45. * `type(uint256).max` signifies an unlimited approval.
  46. *
  47. * Must return true.
  48. */
  49. function approve(address spender, uint256 id, uint256 amount) external returns (bool);
  50. /**
  51. * @dev Grants or revokes unlimited transfer permission of any token id to `spender` for the caller's tokens.
  52. *
  53. * Must return true.
  54. */
  55. function setOperator(address spender, bool approved) external returns (bool);
  56. /**
  57. * @dev Transfers `amount` of token type `id` from the caller's account to `receiver`.
  58. *
  59. * Must return true.
  60. */
  61. function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);
  62. /**
  63. * @dev Transfers `amount` of token type `id` from `sender` to `receiver`.
  64. *
  65. * Must return true.
  66. */
  67. function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);
  68. }
  69. /**
  70. * @dev Optional extension of {IERC6909} that adds metadata functions.
  71. */
  72. interface IERC6909Metadata is IERC6909 {
  73. /**
  74. * @dev Returns the name of the token of type `id`.
  75. */
  76. function name(uint256 id) external view returns (string memory);
  77. /**
  78. * @dev Returns the ticker symbol of the token of type `id`.
  79. */
  80. function symbol(uint256 id) external view returns (string memory);
  81. /**
  82. * @dev Returns the number of decimals for the token of type `id`.
  83. */
  84. function decimals(uint256 id) external view returns (uint8);
  85. }
  86. /**
  87. * @dev Optional extension of {IERC6909} that adds content URI functions.
  88. */
  89. interface IERC6909ContentURI is IERC6909 {
  90. /**
  91. * @dev Returns URI for the contract.
  92. */
  93. function contractURI() external view returns (string memory);
  94. /**
  95. * @dev Returns the URI for the token of type `id`.
  96. */
  97. function tokenURI(uint256 id) external view returns (string memory);
  98. }
  99. /**
  100. * @dev Optional extension of {IERC6909} that adds a token supply function.
  101. */
  102. interface IERC6909TokenSupply is IERC6909 {
  103. /**
  104. * @dev Returns the total supply of the token of type `id`.
  105. */
  106. function totalSupply(uint256 id) external view returns (uint256);
  107. }