Skip to content

src/primitives/production_configuration.hpp

Namespaces

Name
sgns
sgns::primitives

Classes

Name
struct sgns::primitives::ProductionConfiguration
Configuration data used by the PRODUCTION verification engine.

Types

Name
using uint64_t ProductionSlotNumber
using clock::SystemClock ProductionClock
using ProductionClock::Duration ProductionDuration
using base::Blob< crypto::constants::sr25519::vrf::OUTPUT_SIZE > Randomness

Functions

Name
template <class Stream ,typename =std::enable_if_t>
Stream &
operator<<(Stream & s, const ProductionConfiguration & config)
template <class Stream ,typename =std::enable_if_t>
Stream &
operator>>(Stream & s, ProductionConfiguration & config)

Types Documentation

using ProductionSlotNumber

using sgns::primitives::ProductionSlotNumber = uint64_t;

using ProductionClock

using sgns::primitives::ProductionClock = clock::SystemClock;

using ProductionDuration

using sgns::primitives::ProductionDuration = ProductionClock::Duration;

using Randomness

using sgns::primitives::Randomness = base::Blob<crypto::constants::sr25519::vrf::OUTPUT_SIZE>;

Functions Documentation

function operator<<

template <class Stream ,
typename  =std::enable_if_t<Stream::is_encoder_stream>>
Stream & operator<<(
    Stream & s,
    const ProductionConfiguration & config
)

function operator>>

template <class Stream ,
typename  =std::enable_if_t<Stream::is_decoder_stream>>
Stream & operator>>(
    Stream & s,
    ProductionConfiguration & config
)

Source code

#ifndef SUPERGENIUS_CORE_PRIMITIVES_PRODUCTION_CONFIGURATION_HPP
#define SUPERGENIUS_CORE_PRIMITIVES_PRODUCTION_CONFIGURATION_HPP

#include "base/blob.hpp"
#include "primitives/authority.hpp"
#include "singleton/IComponent.hpp"
#include "verification/production/common.hpp"

namespace sgns::primitives {

  using ProductionSlotNumber = uint64_t;
  using ProductionClock = clock::SystemClock;
  using ProductionDuration = ProductionClock::Duration;
  using Randomness = base::Blob<crypto::constants::sr25519::vrf::OUTPUT_SIZE>;

  struct ProductionConfiguration : public IComponent {
    ProductionDuration slot_duration{};

    ProductionSlotNumber epoch_length{};

    std::pair<uint64_t, uint64_t> leadership_rate;

    primitives::AuthorityList genesis_authorities;

    Randomness randomness;
    std::string GetName() override
    {
      return "ProductionConfiguration";
    }
  };

  template <class Stream,
            typename = std::enable_if_t<Stream::is_encoder_stream>>
  Stream &operator<<(Stream &s, const ProductionConfiguration &config) {
    size_t slot_duration_u64 =
        std::chrono::duration_cast<std::chrono::milliseconds>(
            config.slot_duration)
            .count();
    return s << slot_duration_u64 << config.epoch_length
             << config.leadership_rate << config.genesis_authorities
             << config.randomness;
  }

  template <class Stream,
            typename = std::enable_if_t<Stream::is_decoder_stream>>
  Stream &operator>>(Stream &s, ProductionConfiguration &config) {
    size_t slot_duration_u64{};
    s >> slot_duration_u64 >> config.epoch_length >> config.leadership_rate
        >> config.genesis_authorities >> config.randomness;
    config.slot_duration = std::chrono::milliseconds(slot_duration_u64);
    return s;
  }
}  // namespace sgns::primitives

#endif  // SUPERGENIUS_CORE_PRIMITIVES_PRODUCTION_CONFIGURATION_HPP

Updated on 2026-03-04 at 13:10:44 -0800