Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

NoncesKeyed

Inherits: Nonces

Alternative to {Nonces}, that supports key-ed nonces. Follows the https://eips.ethereum.org/EIPS/eip-4337#semi-abstracted-nonce-support[ERC-4337's semi-abstracted nonce system]. NOTE: This contract inherits from {Nonces} and reuses its storage for the first nonce key (i.e. 0). This makes upgrading from {Nonces} to {NoncesKeyed} safe when using their upgradeable versions (e.g. NoncesKeyedUpgradeable). Doing so will NOT reset the current state of nonces, avoiding replay attacks where a nonce is reused after the upgrade.

State Variables

_nonces

mapping(address owner => mapping(uint192 key => uint64)) private _nonces;

Functions

nonces

Returns the next unused nonce for an address and key. Result contains the key prefix.

function nonces(address owner, uint192 key) public view virtual returns (uint256);

_useNonce

Consumes the next unused nonce for an address and key. Returns the current value without the key prefix. Consumed nonce is increased, so calling this function twice with the same arguments will return different (sequential) results.

function _useNonce(address owner, uint192 key) internal virtual returns (uint256);

_useCheckedNonce

*Same as _useNonce but checking that nonce is the next valid for owner. This version takes the key and the nonce in a single uint256 parameter:

  • use the first 24 bytes for the key
  • use the last 8 bytes for the nonce*
function _useCheckedNonce(address owner, uint256 keyNonce) internal virtual override;

_useCheckedNonce

Same as _useNonce but checking that nonce is the next valid for owner. This version takes the key and the nonce as two different parameters.

function _useCheckedNonce(address owner, uint192 key, uint64 nonce) internal virtual;

_pack

Pack key and nonce into a keyNonce

function _pack(uint192 key, uint64 nonce) private pure returns (uint256);

_unpack

Unpack a keyNonce into its key and nonce components

function _unpack(uint256 keyNonce) private pure returns (uint192 key, uint64 nonce);