def __next__(self): if not self._c_iter_ptr: raise StopIteration() (c_address, c_address_len) = ffi.prepare_byte_result() (c_value, c_value_len) = ffi.prepare_byte_result() _libexec('merkle_db_leaf_iterator_next', self._c_iter_ptr, ctypes.byref(c_address), ctypes.byref(c_address_len), ctypes.byref(c_value), ctypes.byref(c_value_len)) address = ffi.from_c_bytes(c_address, c_address_len).decode() value = _decode(ffi.from_c_bytes(c_value, c_value_len)) return (address, value)
def update(self, set_items, delete_items=None, virtual=True): """ Args: set_items (dict): dict key, values where keys are addresses delete_items (list): list of addresses virtual (boolean): True if not committing to disk. I.e., speculative root hash Returns: the state root after the operations """ c_set_items = (ctypes.POINTER(_Entry) * len(set_items))() for (i, (key, value)) in enumerate(set_items.items()): c_set_items[i] = ctypes.pointer(_Entry.new(key, _encode(value))) if delete_items is None: delete_items = [] c_delete_items = (ctypes.c_char_p * len(delete_items))() for (i, address) in enumerate(delete_items): c_delete_items[i] = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_update', self.pointer, c_set_items, ctypes.c_size_t(len(set_items)), c_delete_items, ctypes.c_size_t(len(delete_items)), virtual, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes(c_merkle_root, c_merkle_root_len).decode()
def get_merkle_root(self): (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_get_merkle_root', self.pointer, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes( c_merkle_root, c_merkle_root_len).decode()
def delete(self, address): c_address = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_delete', self.pointer, c_address, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes(c_merkle_root, c_merkle_root_len).decode()
def finalize_block(self, consensus=None, force=False): (c_result, c_result_len) = ffi.prepare_byte_result() self._call('finalize_block', consensus, len(consensus), ctypes.c_bool(force), ctypes.byref(c_result), ctypes.byref(c_result_len)) return ffi.from_c_bytes(c_result, c_result_len).decode('utf-8')
def get_merkle_root(self): (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_get_merkle_root', self.pointer, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes( c_merkle_root, c_merkle_root_len).decode()
def update(self, set_items, delete_items=None, virtual=True): """ Args: set_items (dict): dict key, values where keys are addresses delete_items (list): list of addresses virtual (boolean): True if not committing to disk. I.e., speculative root hash Returns: the state root after the operations """ c_set_items = (ctypes.POINTER(_Entry) * len(set_items))() for (i, (key, value)) in enumerate(set_items.items()): c_set_items[i] = ctypes.pointer(_Entry.new(key, _encode(value))) if delete_items is None: delete_items = [] c_delete_items = (ctypes.c_char_p * len(delete_items))() for (i, address) in enumerate(delete_items): c_delete_items[i] = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_update', self.pointer, c_set_items, ctypes.c_size_t(len(set_items)), c_delete_items, ctypes.c_size_t(len(delete_items)), virtual, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes( c_merkle_root, c_merkle_root_len).decode()
def get(self, address): c_address = ctypes.c_char_p(address.encode()) (c_data, c_data_len) = ffi.prepare_byte_result() _libexec('merkle_db_get', self.pointer, c_address, ctypes.byref(c_data), ctypes.byref(c_data_len)) return _decode(ffi.from_c_bytes(c_data, c_data_len))
def get(self, address): c_address = ctypes.c_char_p(address.encode()) (c_data, c_data_len) = ffi.prepare_byte_result() _libexec('merkle_db_get', self.pointer, c_address, ctypes.byref(c_data), ctypes.byref(c_data_len)) return _decode(ffi.from_c_bytes(c_data, c_data_len))
def __next__(self): if not self._c_iter_ptr: raise StopIteration() (c_address, c_address_len) = ffi.prepare_byte_result() (c_value, c_value_len) = ffi.prepare_byte_result() _libexec('merkle_db_leaf_iterator_next', self._c_iter_ptr, ctypes.byref(c_address), ctypes.byref(c_address_len), ctypes.byref(c_value), ctypes.byref(c_value_len)) address = ffi.from_c_bytes(c_address, c_address_len).decode() value = _decode(ffi.from_c_bytes(c_value, c_value_len)) return (address, value)
def delete(self, address): c_address = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() _libexec('merkle_db_delete', self.pointer, c_address, ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes( c_merkle_root, c_merkle_root_len).decode()
def set(self, address, value): c_address = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() data = _encode(value) _libexec('merkle_db_set', self.pointer, c_address, data, len(data), ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes(c_merkle_root, c_merkle_root_len).decode()
def set(self, address, value): c_address = ctypes.c_char_p(address.encode()) (c_merkle_root, c_merkle_root_len) = ffi.prepare_byte_result() data = _encode(value) _libexec('merkle_db_set', self.pointer, c_address, data, len(data), ctypes.byref(c_merkle_root), ctypes.byref(c_merkle_root_len)) return ffi.from_c_bytes( c_merkle_root, c_merkle_root_len).decode()
def summarize_block(self, force=False): (c_result, c_result_len) = ffi.prepare_byte_result() self._call('summarize_block', ctypes.c_bool(force), ctypes.byref(c_result), ctypes.byref(c_result_len)) return ffi.from_c_bytes(c_result, c_result_len)