src/blockchain/block_tree.hpp
Namespaces
Classes
Source code
#ifndef SUPERGENIUS_BLOCK_TREE_HPP
#define SUPERGENIUS_BLOCK_TREE_HPP
#include <cstdint>
#include <vector>
#include <boost/optional.hpp>
#include "outcome/outcome.hpp"
#include "primitives/block.hpp"
#include "primitives/block_id.hpp"
#include "primitives/common.hpp"
#include "primitives/justification.hpp"
#include "singleton/IComponent.hpp"
namespace sgns::blockchain {
struct BlockTree : public IComponent {
using BlockHashVecRes = outcome::result<std::vector<primitives::BlockHash>>;
~BlockTree() override = default;
virtual outcome::result<primitives::BlockHeader> getBlockHeader(
const primitives::BlockId &block) const = 0;
virtual outcome::result<primitives::BlockBody> getBlockBody(
const primitives::BlockId &block) const = 0;
virtual outcome::result<primitives::Justification> getBlockJustification(
const primitives::BlockId &block) const = 0;
virtual outcome::result<void> addBlockHeader(
const primitives::BlockHeader &header) = 0;
virtual outcome::result<void> addBlockBody(
primitives::BlockNumber block_number,
const primitives::BlockHash &block_hash,
const primitives::BlockBody &block_body) = 0;
virtual outcome::result<void> addBlock(const primitives::Block &block) = 0;
virtual outcome::result<void> finalize(
const primitives::BlockHash &block,
const primitives::Justification &justification) = 0;
virtual BlockHashVecRes getChainByBlock(
const primitives::BlockHash &block) = 0;
virtual BlockHashVecRes getChainByBlock(const primitives::BlockHash &block,
bool ascending,
uint64_t maximum) = 0;
virtual BlockHashVecRes getChainByBlocks(
const primitives::BlockHash &top_block,
const primitives::BlockHash &bottom_block) = 0;
virtual bool hasDirectChain(const primitives::BlockHash &ancestor,
const primitives::BlockHash &descendant) = 0;
virtual BlockHashVecRes longestPath() = 0;
[[nodiscard]] virtual primitives::BlockInfo deepestLeaf() const = 0;
[[nodiscard]] virtual outcome::result<primitives::BlockInfo> getBestContaining(
const primitives::BlockHash &target_hash,
const boost::optional<primitives::BlockNumber> &max_number ) const = 0;
[[nodiscard]] virtual std::vector<primitives::BlockHash> getLeaves() const = 0;
virtual BlockHashVecRes getChildren(const primitives::BlockHash &block) = 0;
[[nodiscard]] virtual primitives::BlockInfo getLastFinalized() const = 0;
};
} // namespace sgns::blockchain
#endif // SUPERGENIUS_BLOCK_TREE_HPP
Updated on 2026-03-04 at 13:10:44 -0800