You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
790 B
31 lines
790 B
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "./Counters.sol";
|
|
|
|
/**
|
|
* @dev Provides tracking nonces for addresses. Nonces will only increment.
|
|
*/
|
|
abstract contract Nonces {
|
|
using Counters for Counters.Counter;
|
|
|
|
mapping(address => Counters.Counter) private _nonces;
|
|
|
|
/**
|
|
* @dev Returns an address nonce.
|
|
*/
|
|
function nonces(address owner) public view virtual returns (uint256) {
|
|
return _nonces[owner].current();
|
|
}
|
|
|
|
/**
|
|
* @dev Consumes a nonce.
|
|
*
|
|
* Returns the current value and increments nonce.
|
|
*/
|
|
function _useNonce(address owner) internal virtual returns (uint256 current) {
|
|
Counters.Counter storage nonce = _nonces[owner];
|
|
current = nonce.current();
|
|
nonce.increment();
|
|
}
|
|
}
|
|
|