# local imports from cic_eth.db.models.nonce import ( Nonce, NonceReservation, ) class NonceOracle(): """Ensures atomic nonce increments for all transactions across all tasks and threads. :param address: Address to generate nonces for :type address: str, 0x-hex :param default_nonce: Initial nonce value to use if no nonce cache entry already exists :type default_nonce: number """ def __init__(self, address, default_nonce): self.address = address self.default_nonce = default_nonce def next(self): """Get next unique nonce. :returns: Nonce :rtype: number """ raise AttributeError('this should not be called') return Nonce.next(self.address, self.default_nonce) def next_by_task_uuid(self, uuid, session=None): return NonceReservation.release(uuid, session=session)