cic-internal-integration/apps/cic-eth/cic_eth/eth/nonce.py

33 lines
871 B
Python
Raw Permalink Normal View History

2021-02-01 18:12:51 +01:00
# local imports
2021-03-06 18:55:51 +01:00
from cic_eth.db.models.nonce import (
Nonce,
NonceReservation,
)
2021-02-01 18:12:51 +01:00
class CustodialTaskNonceOracle():
2021-02-01 18:12:51 +01:00
"""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, uuid, session=None):
2021-02-01 18:12:51 +01:00
self.address = address
self.uuid = uuid
self.session = session
2021-02-01 18:12:51 +01:00
def get_nonce(self):
return self.next_nonce()
def next_nonce(self):
2021-02-01 18:12:51 +01:00
"""Get next unique nonce.
:returns: Nonce
:rtype: number
"""
r = NonceReservation.release(self.address, self.uuid, session=self.session)
return r[1]