Nonces.sol 791 B

12345678910111213141516171819202122232425262728293031
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.19;
  3. import "./Counters.sol";
  4. /**
  5. * @dev Provides tracking nonces for addresses. Nonces will only increment.
  6. */
  7. abstract contract Nonces {
  8. using Counters for Counters.Counter;
  9. mapping(address => Counters.Counter) private _nonces;
  10. /**
  11. * @dev Returns an address nonce.
  12. */
  13. function nonces(address owner) public view virtual returns (uint256) {
  14. return _nonces[owner].current();
  15. }
  16. /**
  17. * @dev Consumes a nonce.
  18. *
  19. * Returns the current value and increments nonce.
  20. */
  21. function _useNonce(address owner) internal virtual returns (uint256 current) {
  22. Counters.Counter storage nonce = _nonces[owner];
  23. current = nonce.current();
  24. nonce.increment();
  25. }
  26. }