2021-04-15 17:16:31 +02:00
|
|
|
# standard imports
|
|
|
|
import logging
|
|
|
|
|
2021-08-27 12:23:11 +02:00
|
|
|
logg = logging.getLogger(__name__)
|
2021-04-15 17:16:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
class Backend:
|
2021-08-27 12:23:11 +02:00
|
|
|
"""Base class for syncer state backend.
|
2021-04-15 17:16:31 +02:00
|
|
|
|
2021-08-27 12:23:11 +02:00
|
|
|
:param flags_reversed: If set, filter flags are interpreted from left to right
|
|
|
|
:type flags_reversed: bool
|
|
|
|
"""
|
|
|
|
|
|
|
|
def __init__(self, object_id, flags_reversed=False):
|
|
|
|
self.object_id = object_id
|
2021-04-15 17:16:31 +02:00
|
|
|
self.filter_count = 0
|
|
|
|
self.flags_reversed = flags_reversed
|
2021-08-26 10:09:47 +02:00
|
|
|
|
|
|
|
self.block_height_offset = 0
|
|
|
|
self.tx_index_offset = 0
|
|
|
|
|
|
|
|
self.block_height_cursor = 0
|
|
|
|
self.tx_index_cursor = 0
|
|
|
|
|
|
|
|
self.block_height_target = 0
|
|
|
|
self.tx_index_target = 0
|
|
|
|
|
2021-04-15 17:16:31 +02:00
|
|
|
|
|
|
|
def check_filter(self, n, flags):
|
2021-08-27 12:23:11 +02:00
|
|
|
"""Check whether an individual filter flag is set.
|
|
|
|
|
|
|
|
:param n: Bit index
|
|
|
|
:type n: int
|
|
|
|
:param flags: Bit field to check against
|
|
|
|
:type flags: int
|
|
|
|
:rtype: bool
|
|
|
|
:returns: True if set
|
|
|
|
"""
|
2021-04-15 17:16:31 +02:00
|
|
|
if self.flags_reversed:
|
|
|
|
try:
|
|
|
|
v = 1 << flags.bit_length() - 1
|
|
|
|
return (v >> n) & flags > 0
|
|
|
|
except ValueError:
|
|
|
|
pass
|
|
|
|
return False
|
|
|
|
return flags & (1 << n) > 0
|
2021-08-26 10:09:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def chain(self):
|
2021-08-27 12:23:11 +02:00
|
|
|
"""Returns chain spec for syncer.
|
2021-08-26 10:09:47 +02:00
|
|
|
|
|
|
|
:returns: Chain spec
|
|
|
|
:rtype chain_spec: cic_registry.chain.ChainSpec
|
|
|
|
"""
|
|
|
|
return self.chain_spec
|
|
|
|
|
2021-08-27 12:23:11 +02:00
|
|
|
|
2021-08-26 10:09:47 +02:00
|
|
|
def __str__(self):
|
2021-08-27 12:23:11 +02:00
|
|
|
return "syncerbackend {} chain {} start {} target {}".format(self.object_id, self.chain(), self.start(), self.target())
|