123456789101112131415161718192021222324252627282930 |
- // SPDX-License-Identifier: MIT
- pragma solidity ^0.8.19;
- /**
- * @dev Provides tracking nonces for addresses. Nonces will only increment.
- */
- abstract contract Nonces {
- mapping(address => uint256) private _nonces;
- /**
- * @dev Returns an address nonce.
- */
- function nonces(address owner) public view virtual returns (uint256) {
- return _nonces[owner];
- }
- /**
- * @dev Consumes a nonce.
- *
- * Returns the current value and increments nonce.
- */
- function _useNonce(address owner) internal virtual returns (uint256) {
- // For each account, the nonce has an initial value of 0, can only be incremented by one, and cannot be
- // decremented or reset. This guarantees that the nonce never overflows.
- unchecked {
- // It is important to do x++ and not ++x here.
- return _nonces[owner]++;
- }
- }
- }
|