src/primitives/block_header.hpp¶
Namespaces¶
| Name |
|---|
| sgns |
| sgns::primitives |
Classes¶
| Name | |
|---|---|
| struct | sgns::primitives::BlockHeader Header of a block in the chain. |
Functions¶
| Name | |
|---|---|
| template <class Stream ,typename =std::enable_if_t Stream & |
operator<<(Stream & s, const BlockHeader & bh) Outputs a BlockHeader to an encoding stream. |
| template <class Stream ,typename =std::enable_if_t Stream & |
operator>>(Stream & s, BlockHeader & bh) Decodes a BlockHeader from a decoding stream. |
Functions Documentation¶
function operator<<¶
template <class Stream ,
typename =std::enable_if_t<Stream::is_encoder_stream>>
Stream & operator<<(
Stream & s,
const BlockHeader & bh
)
Outputs a BlockHeader to an encoding stream.
Parameters:
- s Stream reference.
- bh Header to output.
Template Parameters:
- Stream Output stream type.
Return: Reference to stream.
function operator>>¶
template <class Stream ,
typename =std::enable_if_t<Stream::is_decoder_stream>>
Stream & operator>>(
Stream & s,
BlockHeader & bh
)
Decodes a BlockHeader from a decoding stream.
Parameters:
- s Stream reference.
- bh Header to populate.
Template Parameters:
- Stream Input stream type.
Return: Reference to stream.
Source code¶
#ifndef SUPERGENIUS_PRIMITIVES_BLOCK_HEADER_HPP
#define SUPERGENIUS_PRIMITIVES_BLOCK_HEADER_HPP
#include <type_traits>
#include <boost/multiprecision/cpp_int.hpp>
#include "base/blob.hpp"
#include "primitives/common.hpp"
#include "primitives/compact_integer.hpp"
#include "primitives/digest.hpp"
namespace sgns::primitives
{
struct BlockHeader
{
BlockHash parent_hash;
BlockNumber number = 0U;
base::Hash256 state_root;
base::Hash256 extrinsics_root;
Digest digest;
bool operator==( const BlockHeader &rhs ) const
{
return std::tie( parent_hash, number, state_root, extrinsics_root, digest ) ==
std::tie( rhs.parent_hash, rhs.number, rhs.state_root, rhs.extrinsics_root, rhs.digest );
}
bool operator!=( const BlockHeader &rhs ) const
{
return !operator==( rhs );
}
//added to fix link error in test mode
friend std::ostream &operator<<( std::ostream &out, const BlockHeader &bh )
{
out << bh.parent_hash << CompactInteger( bh.number ) << bh.state_root << bh.extrinsics_root;
out << bh.digest.size();
for ( const auto &it : bh.digest )
{
out << it.which();
}
return out;
}
//end
};
template <class Stream, typename = std::enable_if_t<Stream::is_encoder_stream>>
Stream &operator<<( Stream &s, const BlockHeader &bh )
{
return s << bh.parent_hash << CompactInteger( bh.number ) << bh.state_root << bh.extrinsics_root << bh.digest;
}
template <class Stream, typename = std::enable_if_t<Stream::is_decoder_stream>>
Stream &operator>>( Stream &s, BlockHeader &bh )
{
CompactInteger number_compact;
s >> bh.parent_hash >> number_compact >> bh.state_root >> bh.extrinsics_root >> bh.digest;
bh.number = number_compact.convert_to<BlockNumber>();
return s;
}
}
#endif
Updated on 2026-03-04 at 13:10:44 -0800