Example #1
0
    def summarize_block(self, force=False):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        self._call('summarize_block', ctypes.c_bool(force),
                   ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                   ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
Example #2
0
    def _get_data_by_id(self, object_id, ffi_fn_name):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        _libexec(ffi_fn_name, self.pointer,
                 ctypes.c_char_p(object_id.encode()), ctypes.byref(vec_ptr),
                 ctypes.byref(vec_len), ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
Example #3
0
    def finalize_block(self, consensus=None, force=False):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        self._call('finalize_block', consensus, len(consensus),
                   ctypes.c_bool(force), ctypes.byref(vec_ptr),
                   ctypes.byref(vec_len), ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap).decode('utf-8')
Example #4
0
    def summarize_block(self):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        _libexec('block_publisher_summarize_block', self.pointer,
                 ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
Example #5
0
    def forks(self, head):
        (vec_ptr, vec_len,
         vec_cap) = ffi.prepare_vec_result(pointer_type=_BlockPayload)

        head = ctypes.c_char_p(head.encode())

        _libexec('chain_controller_forks', self.pointer, head,
                 ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        # Check if NULL
        if not vec_ptr:
            return None

        blocks = []
        for i in range(vec_len.value):
            block_payload = vec_ptr[i]
            payload = ffi.from_rust_vec(
                block_payload.block_ptr,
                ctypes.c_size_t(block_payload.block_len),
                ctypes.c_size_t(block_payload.block_cap),
            )
            block = Block()
            block.ParseFromString(payload)
            blocks.append(BlockWrapper(block))

        LIBRARY.call("chain_controller_reclaim_block_payload_vec", vec_ptr,
                     vec_len, vec_cap)

        return blocks
Example #6
0
    def finalize_block(self, consensus=None):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        _libexec('block_publisher_finalize_block', self.pointer, consensus,
                 len(consensus), ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap).decode('utf-8')
    def _get_data_by_num(self, object_id, ffi_fn_name):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        _pylibexec(ffi_fn_name, self.pointer, ctypes.c_ulonglong(object_id),
                   ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                   ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
Example #8
0
    def get(self, address):
        c_address = ctypes.c_char_p(address.encode())
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec('merkle_db_get', self.pointer, c_address,
                 ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        return _decode(ffi.from_rust_vec(vec_ptr, vec_len, vec_cap))
Example #9
0
    def summarize_block(self, force=False):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        self._call(
            'summarize_block',
            ctypes.c_bool(force),
            ctypes.byref(vec_ptr),
            ctypes.byref(vec_len),
            ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
Example #10
0
    def finalize_block(self, consensus=None, force=False):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()
        self._call(
            'finalize_block',
            consensus, len(consensus),
            ctypes.c_bool(force),
            ctypes.byref(vec_ptr),
            ctypes.byref(vec_len),
            ctypes.byref(vec_cap))

        return ffi.from_rust_vec(vec_ptr, vec_len, vec_cap).decode('utf-8')
Example #11
0
    def get(self, address):
        c_address = ctypes.c_char_p(address.encode())
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec(
            'merkle_db_get',
            self.pointer,
            c_address,
            ctypes.byref(vec_ptr),
            ctypes.byref(vec_len),
            ctypes.byref(vec_cap))

        return _decode(ffi.from_rust_vec(
            vec_ptr, vec_len, vec_cap))
Example #12
0
    def chain_head(self):
        """
        Return the head block of the current chain.
        """
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        try:
            _libexec('commit_store_get_chain_head', self.pointer,
                     ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                     ctypes.byref(vec_cap))
        except ValueError:
            return None

        return self.deserialize_block(
            ffi.from_rust_vec(vec_ptr, vec_len, vec_cap))
Example #13
0
    def chain_head_fn(self):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec('chain_controller_chain_head', self.pointer,
                 ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        # Check if NULL
        if not vec_ptr:
            return None

        payload = ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
        block = Block()
        block.ParseFromString(payload)

        return block
Example #14
0
    def __next__(self):
        if not self._c_iter_ptr:
            raise StopIteration()

        (string_ptr, string_len, string_cap) = ffi.prepare_string_result()
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec('merkle_db_leaf_iterator_next', self._c_iter_ptr,
                 ctypes.byref(string_ptr), ctypes.byref(string_len),
                 ctypes.byref(string_cap), ctypes.byref(vec_ptr),
                 ctypes.byref(vec_len), ctypes.byref(vec_cap))

        address = ffi.from_rust_string(string_ptr, string_len,
                                       string_cap).decode()
        value = _decode(ffi.from_rust_vec(vec_ptr, vec_len, vec_cap))

        return (address, value)
Example #15
0
    def chain_head_fn(self):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec('chain_controller_chain_head',
                 self.pointer,
                 ctypes.byref(vec_ptr),
                 ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        # Check if NULL
        if not vec_ptr:
            return None

        payload = ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
        block = Block()
        block.ParseFromString(payload)

        return block
Example #16
0
    def __next__(self):
        if not self._c_iter_ptr:
            raise StopIteration()

        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec("{}_next".format(self.name), self._c_iter_ptr,
                 ctypes.byref(vec_ptr), ctypes.byref(vec_len),
                 ctypes.byref(vec_cap))

        # Check if NULL
        if not vec_ptr:
            raise StopIteration()

        payload = ffi.from_rust_vec(vec_ptr, vec_len, vec_cap)
        block = Block()
        block.ParseFromString(payload)

        return block
Example #17
0
    def __next__(self):
        if not self._c_iter_ptr:
            raise StopIteration()

        (string_ptr, string_len, string_cap) = ffi.prepare_string_result()
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result()

        _libexec(
            'merkle_db_leaf_iterator_next',
            self._c_iter_ptr,
            ctypes.byref(string_ptr),
            ctypes.byref(string_len),
            ctypes.byref(string_cap),
            ctypes.byref(vec_ptr),
            ctypes.byref(vec_len),
            ctypes.byref(vec_cap))

        address = ffi.from_rust_string(
            string_ptr, string_len, string_cap).decode()
        value = _decode(ffi.from_rust_vec(vec_ptr, vec_len, vec_cap))

        return (address, value)
Example #18
0
    def forks(self, head):
        (vec_ptr, vec_len, vec_cap) = ffi.prepare_vec_result(
            pointer_type=_BlockPayload)

        head = ctypes.c_char_p(head.encode())

        _libexec(
            'chain_controller_forks',
            self.pointer,
            head,
            ctypes.byref(vec_ptr),
            ctypes.byref(vec_len),
            ctypes.byref(vec_cap))

        # Check if NULL
        if not vec_ptr:
            return None

        blocks = []
        for i in range(vec_len.value):
            block_payload = vec_ptr[i]
            payload = ffi.from_rust_vec(
                block_payload.block_ptr,
                ctypes.c_size_t(block_payload.block_len),
                ctypes.c_size_t(block_payload.block_cap),
            )
            block = Block()
            block.ParseFromString(payload)
            blocks.append(block)

        LIBRARY.call(
            "chain_controller_reclaim_block_payload_vec",
            vec_ptr,
            vec_len,
            vec_cap)

        return blocks