cic-cli/cic/contract/base.py

79 lines
1.7 KiB
Python

# standard imports
import os
import hashlib
mod_dir = os.path.dirname(os.path.realpath(__file__))
root_dir = os.path.join(mod_dir, '..')
data_dir = os.path.join(mod_dir, 'data')
schema_dir = os.path.join(mod_dir, 'schema')
class Data:
"""Base class for all parts of the token data deployment.
"""
__default_version = 0
def __init__(self):
self.dirty = False
self.inited = False
self.__version = self.__default_version
self.__hasher = self.__basehasher
def __basehasher(self, v):
h = hashlib.sha256()
h.update(v)
return h.digest()
def hash(self, v):
"""Compute digest of the given data
:param v: Data to hash
:type v: bytes
:rtype: bytes
:return: Hashed data
"""
return self.__hasher(v)
def load(self):
"""Prevents overwriting data from settings if data state has changed.
:raises RuntimeError: If state is dirty
"""
if self.dirty:
raise RuntimeError('Object contains uncommitted changes')
def start(self):
"""Prevents double initialization of data item.
:raises RuntimeError: If already initialized
"""
if self.inited:
raise RuntimeError('Object already initialized')
def verify(self):
"""Verify data state (noop)
"""
return True
def version(self):
"""Return version of data schema.
"""
return self.__version
def set_version(self, version):
"""Set version of data schema. The version number is a single integer.
:param version: version
:type version: int
"""
self.__version = version