Add state finalizers
This commit is contained in:
10
chainqueue/cache/base.py
vendored
10
chainqueue/cache/base.py
vendored
@@ -29,7 +29,7 @@ class CacheTx:
|
||||
self.nonce = None
|
||||
self.value = None
|
||||
|
||||
self.tx_hash = None
|
||||
self.hash = None
|
||||
self.block_number = None
|
||||
self.tx_index = None
|
||||
self.timestamp = None
|
||||
@@ -42,7 +42,7 @@ class CacheTx:
|
||||
|
||||
|
||||
def init(self, tx_hash, nonce, sender, recipient, value):
|
||||
self.tx_hash = self.normalizer.hash(tx_hash)
|
||||
self.hash = self.normalizer.hash(tx_hash)
|
||||
self.sender = self.normalizer.address(sender)
|
||||
self.recipient = self.normalizer.address(recipient)
|
||||
self.nonce = nonce
|
||||
@@ -59,7 +59,7 @@ class CacheTx:
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return '{}: {} ({}) -> {} = {}'.format(self.tx_hash, self.sender, self.nonce, self.recipient, self.value)
|
||||
return '{}: {} ({}) -> {} = {}'.format(self.hash, self.sender, self.nonce, self.recipient, self.value)
|
||||
|
||||
|
||||
|
||||
@@ -133,3 +133,7 @@ class Cache:
|
||||
|
||||
def count(self, cache_filter=None):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def set_block(self, block, tx):
|
||||
raise NotImplementedError()
|
||||
|
||||
@@ -105,12 +105,12 @@ class QueueEntry:
|
||||
self.store.change(self.k, self.store.RESERVED, self.store.QUEUED)
|
||||
|
||||
|
||||
def fail(self, block):
|
||||
def fail(self, block, tx):
|
||||
if self.__match_state(self.store.NETWORK_ERROR):
|
||||
return
|
||||
self.store.set(self.k, self.store.NETWORK_ERROR)
|
||||
if self.cache:
|
||||
self.cache.set_block(self.tx_hash, block)
|
||||
if self.store.cache:
|
||||
self.store.cache.set_block(self.tx_hash, block, tx)
|
||||
|
||||
|
||||
def cancel(self, confirmed=False):
|
||||
@@ -120,8 +120,10 @@ class QueueEntry:
|
||||
self.store.change(self.k, self.store.OBSOLETE, self.store.RESERVED | self.store.QUEUED)
|
||||
|
||||
|
||||
def succeed(self, block):
|
||||
def succeed(self, block, tx):
|
||||
self.store.set(self.k, self.store.FINAL)
|
||||
if self.store.cache:
|
||||
self.store.cache.set_block(self.tx_hash, block, tx)
|
||||
|
||||
|
||||
def __str__(self):
|
||||
|
||||
@@ -121,6 +121,15 @@ class Store:
|
||||
entry.sendfail()
|
||||
|
||||
|
||||
def final(self, k, block, tx, error=False):
|
||||
entry = QueueEntry(self, k)
|
||||
entry.load()
|
||||
if error:
|
||||
entry.fail(block, tx)
|
||||
else:
|
||||
entry.succeed(block, tx)
|
||||
|
||||
|
||||
def send_start(self, k):
|
||||
entry = QueueEntry(self, k)
|
||||
entry.load()
|
||||
|
||||
Reference in New Issue
Block a user