// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: block.proto
// Protobuf C++ Version: 5.26.1

#ifndef GOOGLE_PROTOBUF_INCLUDED_block_2eproto_2epb_2eh
#define GOOGLE_PROTOBUF_INCLUDED_block_2eproto_2epb_2eh

#include <limits>
#include <string>
#include <type_traits>
#include <utility>

#include "google/protobuf/port_def.inc"
#if PROTOBUF_VERSION != 5026001
#error "Protobuf C++ gencode is built with an incompatible version of"
#error "Protobuf C++ headers/runtime. See"
#error "https://protobuf.dev/support/cross-version-runtime-guarantee/#cpp"
#endif
#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
#include "google/protobuf/metadata_lite.h"
#include "google/protobuf/generated_message_reflection.h"
#include "google/protobuf/message.h"
#include "google/protobuf/repeated_field.h"  // IWYU pragma: export
#include "google/protobuf/extension_set.h"  // IWYU pragma: export
#include "google/protobuf/generated_enum_reflection.h"
#include "google/protobuf/unknown_field_set.h"
#include "transaction.pb.h"
// @@protoc_insertion_point(includes)

// Must be included last.
#include "google/protobuf/port_def.inc"

#define PROTOBUF_INTERNAL_EXPORT_block_2eproto

namespace google {
namespace protobuf {
namespace internal {
class AnyMetadata;
}  // namespace internal
}  // namespace protobuf
}  // namespace google

// Internal implementation detail -- do not use these members.
struct TableStruct_block_2eproto {
  static const ::uint32_t offsets[];
};
extern const ::google::protobuf::internal::DescriptorTable
    descriptor_table_block_2eproto;
namespace tari {
namespace rpc {
class Block;
struct BlockDefaultTypeInternal;
extern BlockDefaultTypeInternal _Block_default_instance_;
class BlockHeader;
struct BlockHeaderDefaultTypeInternal;
extern BlockHeaderDefaultTypeInternal _BlockHeader_default_instance_;
class HistoricalBlock;
struct HistoricalBlockDefaultTypeInternal;
extern HistoricalBlockDefaultTypeInternal _HistoricalBlock_default_instance_;
class NewBlockHeaderTemplate;
struct NewBlockHeaderTemplateDefaultTypeInternal;
extern NewBlockHeaderTemplateDefaultTypeInternal _NewBlockHeaderTemplate_default_instance_;
class NewBlockTemplate;
struct NewBlockTemplateDefaultTypeInternal;
extern NewBlockTemplateDefaultTypeInternal _NewBlockTemplate_default_instance_;
class PowAlgo;
struct PowAlgoDefaultTypeInternal;
extern PowAlgoDefaultTypeInternal _PowAlgo_default_instance_;
class ProofOfWork;
struct ProofOfWorkDefaultTypeInternal;
extern ProofOfWorkDefaultTypeInternal _ProofOfWork_default_instance_;
}  // namespace rpc
}  // namespace tari
namespace google {
namespace protobuf {
}  // namespace protobuf
}  // namespace google

namespace tari {
namespace rpc {
enum PowAlgo_PowAlgos : int {
  PowAlgo_PowAlgos_POW_ALGOS_RANDOMX = 0,
  PowAlgo_PowAlgos_POW_ALGOS_SHA3X = 1,
  PowAlgo_PowAlgos_PowAlgo_PowAlgos_INT_MIN_SENTINEL_DO_NOT_USE_ =
      std::numeric_limits<::int32_t>::min(),
  PowAlgo_PowAlgos_PowAlgo_PowAlgos_INT_MAX_SENTINEL_DO_NOT_USE_ =
      std::numeric_limits<::int32_t>::max(),
};

bool PowAlgo_PowAlgos_IsValid(int value);
extern const uint32_t PowAlgo_PowAlgos_internal_data_[];
constexpr PowAlgo_PowAlgos PowAlgo_PowAlgos_PowAlgos_MIN = static_cast<PowAlgo_PowAlgos>(0);
constexpr PowAlgo_PowAlgos PowAlgo_PowAlgos_PowAlgos_MAX = static_cast<PowAlgo_PowAlgos>(1);
constexpr int PowAlgo_PowAlgos_PowAlgos_ARRAYSIZE = 1 + 1;
const ::google::protobuf::EnumDescriptor*
PowAlgo_PowAlgos_descriptor();
template <typename T>
const std::string& PowAlgo_PowAlgos_Name(T value) {
  static_assert(std::is_same<T, PowAlgo_PowAlgos>::value ||
                    std::is_integral<T>::value,
                "Incorrect type passed to PowAlgos_Name().");
  return PowAlgo_PowAlgos_Name(static_cast<PowAlgo_PowAlgos>(value));
}
template <>
inline const std::string& PowAlgo_PowAlgos_Name(PowAlgo_PowAlgos value) {
  return ::google::protobuf::internal::NameOfDenseEnum<PowAlgo_PowAlgos_descriptor,
                                                 0, 1>(
      static_cast<int>(value));
}
inline bool PowAlgo_PowAlgos_Parse(absl::string_view name, PowAlgo_PowAlgos* value) {
  return ::google::protobuf::internal::ParseNamedEnum<PowAlgo_PowAlgos>(
      PowAlgo_PowAlgos_descriptor(), name, value);
}

// ===================================================================


// -------------------------------------------------------------------

class ProofOfWork final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.ProofOfWork) */ {
 public:
  inline ProofOfWork() : ProofOfWork(nullptr) {}
  ~ProofOfWork() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR ProofOfWork(
      ::google::protobuf::internal::ConstantInitialized);

  inline ProofOfWork(const ProofOfWork& from) : ProofOfWork(nullptr, from) {}
  inline ProofOfWork(ProofOfWork&& from) noexcept
      : ProofOfWork(nullptr, std::move(from)) {}
  inline ProofOfWork& operator=(const ProofOfWork& from) {
    CopyFrom(from);
    return *this;
  }
  inline ProofOfWork& operator=(ProofOfWork&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const ProofOfWork& default_instance() {
    return *internal_default_instance();
  }
  static inline const ProofOfWork* internal_default_instance() {
    return reinterpret_cast<const ProofOfWork*>(
        &_ProofOfWork_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 1;
  friend void swap(ProofOfWork& a, ProofOfWork& b) { a.Swap(&b); }
  inline void Swap(ProofOfWork* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(ProofOfWork* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  ProofOfWork* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<ProofOfWork>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const ProofOfWork& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const ProofOfWork& from) { ProofOfWork::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(ProofOfWork* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.ProofOfWork"; }

 protected:
  explicit ProofOfWork(::google::protobuf::Arena* arena);
  ProofOfWork(::google::protobuf::Arena* arena, const ProofOfWork& from);
  ProofOfWork(::google::protobuf::Arena* arena, ProofOfWork&& from) noexcept
      : ProofOfWork(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kPowDataFieldNumber = 4,
    kPowAlgoFieldNumber = 1,
  };
  // bytes pow_data = 4;
  void clear_pow_data() ;
  const std::string& pow_data() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_pow_data(Arg_&& arg, Args_... args);
  std::string* mutable_pow_data();
  PROTOBUF_NODISCARD std::string* release_pow_data();
  void set_allocated_pow_data(std::string* value);

  private:
  const std::string& _internal_pow_data() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_pow_data(
      const std::string& value);
  std::string* _internal_mutable_pow_data();

  public:
  // uint64 pow_algo = 1;
  void clear_pow_algo() ;
  ::uint64_t pow_algo() const;
  void set_pow_algo(::uint64_t value);

  private:
  ::uint64_t _internal_pow_algo() const;
  void _internal_set_pow_algo(::uint64_t value);

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.ProofOfWork)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      1, 2, 0,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::ArenaStringPtr pow_data_;
    ::uint64_t pow_algo_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class PowAlgo final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.PowAlgo) */ {
 public:
  inline PowAlgo() : PowAlgo(nullptr) {}
  ~PowAlgo() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR PowAlgo(
      ::google::protobuf::internal::ConstantInitialized);

  inline PowAlgo(const PowAlgo& from) : PowAlgo(nullptr, from) {}
  inline PowAlgo(PowAlgo&& from) noexcept
      : PowAlgo(nullptr, std::move(from)) {}
  inline PowAlgo& operator=(const PowAlgo& from) {
    CopyFrom(from);
    return *this;
  }
  inline PowAlgo& operator=(PowAlgo&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const PowAlgo& default_instance() {
    return *internal_default_instance();
  }
  static inline const PowAlgo* internal_default_instance() {
    return reinterpret_cast<const PowAlgo*>(
        &_PowAlgo_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 2;
  friend void swap(PowAlgo& a, PowAlgo& b) { a.Swap(&b); }
  inline void Swap(PowAlgo* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(PowAlgo* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  PowAlgo* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<PowAlgo>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const PowAlgo& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const PowAlgo& from) { PowAlgo::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(PowAlgo* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.PowAlgo"; }

 protected:
  explicit PowAlgo(::google::protobuf::Arena* arena);
  PowAlgo(::google::protobuf::Arena* arena, const PowAlgo& from);
  PowAlgo(::google::protobuf::Arena* arena, PowAlgo&& from) noexcept
      : PowAlgo(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------
  using PowAlgos = PowAlgo_PowAlgos;
  static constexpr PowAlgos POW_ALGOS_RANDOMX = PowAlgo_PowAlgos_POW_ALGOS_RANDOMX;
  static constexpr PowAlgos POW_ALGOS_SHA3X = PowAlgo_PowAlgos_POW_ALGOS_SHA3X;
  static inline bool PowAlgos_IsValid(int value) {
    return PowAlgo_PowAlgos_IsValid(value);
  }
  static constexpr PowAlgos PowAlgos_MIN = PowAlgo_PowAlgos_PowAlgos_MIN;
  static constexpr PowAlgos PowAlgos_MAX = PowAlgo_PowAlgos_PowAlgos_MAX;
  static constexpr int PowAlgos_ARRAYSIZE = PowAlgo_PowAlgos_PowAlgos_ARRAYSIZE;
  static inline const ::google::protobuf::EnumDescriptor* PowAlgos_descriptor() {
    return PowAlgo_PowAlgos_descriptor();
  }
  template <typename T>
  static inline const std::string& PowAlgos_Name(T value) {
    return PowAlgo_PowAlgos_Name(value);
  }
  static inline bool PowAlgos_Parse(absl::string_view name, PowAlgos* value) {
    return PowAlgo_PowAlgos_Parse(name, value);
  }

  // accessors -------------------------------------------------------
  enum : int {
    kPowAlgoFieldNumber = 1,
  };
  // .tari.rpc.PowAlgo.PowAlgos pow_algo = 1;
  void clear_pow_algo() ;
  ::tari::rpc::PowAlgo_PowAlgos pow_algo() const;
  void set_pow_algo(::tari::rpc::PowAlgo_PowAlgos value);

  private:
  ::tari::rpc::PowAlgo_PowAlgos _internal_pow_algo() const;
  void _internal_set_pow_algo(::tari::rpc::PowAlgo_PowAlgos value);

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.PowAlgo)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      0, 1, 0,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    int pow_algo_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class NewBlockHeaderTemplate final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.NewBlockHeaderTemplate) */ {
 public:
  inline NewBlockHeaderTemplate() : NewBlockHeaderTemplate(nullptr) {}
  ~NewBlockHeaderTemplate() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR NewBlockHeaderTemplate(
      ::google::protobuf::internal::ConstantInitialized);

  inline NewBlockHeaderTemplate(const NewBlockHeaderTemplate& from) : NewBlockHeaderTemplate(nullptr, from) {}
  inline NewBlockHeaderTemplate(NewBlockHeaderTemplate&& from) noexcept
      : NewBlockHeaderTemplate(nullptr, std::move(from)) {}
  inline NewBlockHeaderTemplate& operator=(const NewBlockHeaderTemplate& from) {
    CopyFrom(from);
    return *this;
  }
  inline NewBlockHeaderTemplate& operator=(NewBlockHeaderTemplate&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const NewBlockHeaderTemplate& default_instance() {
    return *internal_default_instance();
  }
  static inline const NewBlockHeaderTemplate* internal_default_instance() {
    return reinterpret_cast<const NewBlockHeaderTemplate*>(
        &_NewBlockHeaderTemplate_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 5;
  friend void swap(NewBlockHeaderTemplate& a, NewBlockHeaderTemplate& b) { a.Swap(&b); }
  inline void Swap(NewBlockHeaderTemplate* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NewBlockHeaderTemplate* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  NewBlockHeaderTemplate* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<NewBlockHeaderTemplate>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NewBlockHeaderTemplate& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NewBlockHeaderTemplate& from) { NewBlockHeaderTemplate::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(NewBlockHeaderTemplate* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.NewBlockHeaderTemplate"; }

 protected:
  explicit NewBlockHeaderTemplate(::google::protobuf::Arena* arena);
  NewBlockHeaderTemplate(::google::protobuf::Arena* arena, const NewBlockHeaderTemplate& from);
  NewBlockHeaderTemplate(::google::protobuf::Arena* arena, NewBlockHeaderTemplate&& from) noexcept
      : NewBlockHeaderTemplate(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kPrevHashFieldNumber = 3,
    kTotalKernelOffsetFieldNumber = 4,
    kTotalScriptOffsetFieldNumber = 7,
    kPowFieldNumber = 5,
    kHeightFieldNumber = 2,
    kVersionFieldNumber = 1,
  };
  // bytes prev_hash = 3;
  void clear_prev_hash() ;
  const std::string& prev_hash() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_prev_hash(Arg_&& arg, Args_... args);
  std::string* mutable_prev_hash();
  PROTOBUF_NODISCARD std::string* release_prev_hash();
  void set_allocated_prev_hash(std::string* value);

  private:
  const std::string& _internal_prev_hash() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_prev_hash(
      const std::string& value);
  std::string* _internal_mutable_prev_hash();

  public:
  // bytes total_kernel_offset = 4;
  void clear_total_kernel_offset() ;
  const std::string& total_kernel_offset() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_total_kernel_offset(Arg_&& arg, Args_... args);
  std::string* mutable_total_kernel_offset();
  PROTOBUF_NODISCARD std::string* release_total_kernel_offset();
  void set_allocated_total_kernel_offset(std::string* value);

  private:
  const std::string& _internal_total_kernel_offset() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_total_kernel_offset(
      const std::string& value);
  std::string* _internal_mutable_total_kernel_offset();

  public:
  // bytes total_script_offset = 7;
  void clear_total_script_offset() ;
  const std::string& total_script_offset() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_total_script_offset(Arg_&& arg, Args_... args);
  std::string* mutable_total_script_offset();
  PROTOBUF_NODISCARD std::string* release_total_script_offset();
  void set_allocated_total_script_offset(std::string* value);

  private:
  const std::string& _internal_total_script_offset() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_total_script_offset(
      const std::string& value);
  std::string* _internal_mutable_total_script_offset();

  public:
  // .tari.rpc.ProofOfWork pow = 5;
  bool has_pow() const;
  void clear_pow() ;
  const ::tari::rpc::ProofOfWork& pow() const;
  PROTOBUF_NODISCARD ::tari::rpc::ProofOfWork* release_pow();
  ::tari::rpc::ProofOfWork* mutable_pow();
  void set_allocated_pow(::tari::rpc::ProofOfWork* value);
  void unsafe_arena_set_allocated_pow(::tari::rpc::ProofOfWork* value);
  ::tari::rpc::ProofOfWork* unsafe_arena_release_pow();

  private:
  const ::tari::rpc::ProofOfWork& _internal_pow() const;
  ::tari::rpc::ProofOfWork* _internal_mutable_pow();

  public:
  // uint64 height = 2;
  void clear_height() ;
  ::uint64_t height() const;
  void set_height(::uint64_t value);

  private:
  ::uint64_t _internal_height() const;
  void _internal_set_height(::uint64_t value);

  public:
  // uint32 version = 1;
  void clear_version() ;
  ::uint32_t version() const;
  void set_version(::uint32_t value);

  private:
  ::uint32_t _internal_version() const;
  void _internal_set_version(::uint32_t value);

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.NewBlockHeaderTemplate)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      3, 6, 1,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr prev_hash_;
    ::google::protobuf::internal::ArenaStringPtr total_kernel_offset_;
    ::google::protobuf::internal::ArenaStringPtr total_script_offset_;
    ::tari::rpc::ProofOfWork* pow_;
    ::uint64_t height_;
    ::uint32_t version_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class BlockHeader final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.BlockHeader) */ {
 public:
  inline BlockHeader() : BlockHeader(nullptr) {}
  ~BlockHeader() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR BlockHeader(
      ::google::protobuf::internal::ConstantInitialized);

  inline BlockHeader(const BlockHeader& from) : BlockHeader(nullptr, from) {}
  inline BlockHeader(BlockHeader&& from) noexcept
      : BlockHeader(nullptr, std::move(from)) {}
  inline BlockHeader& operator=(const BlockHeader& from) {
    CopyFrom(from);
    return *this;
  }
  inline BlockHeader& operator=(BlockHeader&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const BlockHeader& default_instance() {
    return *internal_default_instance();
  }
  static inline const BlockHeader* internal_default_instance() {
    return reinterpret_cast<const BlockHeader*>(
        &_BlockHeader_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 0;
  friend void swap(BlockHeader& a, BlockHeader& b) { a.Swap(&b); }
  inline void Swap(BlockHeader* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(BlockHeader* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  BlockHeader* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<BlockHeader>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const BlockHeader& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const BlockHeader& from) { BlockHeader::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(BlockHeader* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.BlockHeader"; }

 protected:
  explicit BlockHeader(::google::protobuf::Arena* arena);
  BlockHeader(::google::protobuf::Arena* arena, const BlockHeader& from);
  BlockHeader(::google::protobuf::Arena* arena, BlockHeader&& from) noexcept
      : BlockHeader(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kHashFieldNumber = 1,
    kPrevHashFieldNumber = 4,
    kOutputMrFieldNumber = 6,
    kKernelMrFieldNumber = 8,
    kInputMrFieldNumber = 9,
    kTotalKernelOffsetFieldNumber = 10,
    kTotalScriptOffsetFieldNumber = 15,
    kValidatorNodeMrFieldNumber = 16,
    kPowFieldNumber = 12,
    kHeightFieldNumber = 3,
    kTimestampFieldNumber = 5,
    kNonceFieldNumber = 11,
    kKernelMmrSizeFieldNumber = 13,
    kOutputMmrSizeFieldNumber = 14,
    kValidatorNodeSizeFieldNumber = 17,
    kVersionFieldNumber = 2,
  };
  // bytes hash = 1;
  void clear_hash() ;
  const std::string& hash() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_hash(Arg_&& arg, Args_... args);
  std::string* mutable_hash();
  PROTOBUF_NODISCARD std::string* release_hash();
  void set_allocated_hash(std::string* value);

  private:
  const std::string& _internal_hash() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_hash(
      const std::string& value);
  std::string* _internal_mutable_hash();

  public:
  // bytes prev_hash = 4;
  void clear_prev_hash() ;
  const std::string& prev_hash() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_prev_hash(Arg_&& arg, Args_... args);
  std::string* mutable_prev_hash();
  PROTOBUF_NODISCARD std::string* release_prev_hash();
  void set_allocated_prev_hash(std::string* value);

  private:
  const std::string& _internal_prev_hash() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_prev_hash(
      const std::string& value);
  std::string* _internal_mutable_prev_hash();

  public:
  // bytes output_mr = 6;
  void clear_output_mr() ;
  const std::string& output_mr() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_output_mr(Arg_&& arg, Args_... args);
  std::string* mutable_output_mr();
  PROTOBUF_NODISCARD std::string* release_output_mr();
  void set_allocated_output_mr(std::string* value);

  private:
  const std::string& _internal_output_mr() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_output_mr(
      const std::string& value);
  std::string* _internal_mutable_output_mr();

  public:
  // bytes kernel_mr = 8;
  void clear_kernel_mr() ;
  const std::string& kernel_mr() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_kernel_mr(Arg_&& arg, Args_... args);
  std::string* mutable_kernel_mr();
  PROTOBUF_NODISCARD std::string* release_kernel_mr();
  void set_allocated_kernel_mr(std::string* value);

  private:
  const std::string& _internal_kernel_mr() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_kernel_mr(
      const std::string& value);
  std::string* _internal_mutable_kernel_mr();

  public:
  // bytes input_mr = 9;
  void clear_input_mr() ;
  const std::string& input_mr() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_input_mr(Arg_&& arg, Args_... args);
  std::string* mutable_input_mr();
  PROTOBUF_NODISCARD std::string* release_input_mr();
  void set_allocated_input_mr(std::string* value);

  private:
  const std::string& _internal_input_mr() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_input_mr(
      const std::string& value);
  std::string* _internal_mutable_input_mr();

  public:
  // bytes total_kernel_offset = 10;
  void clear_total_kernel_offset() ;
  const std::string& total_kernel_offset() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_total_kernel_offset(Arg_&& arg, Args_... args);
  std::string* mutable_total_kernel_offset();
  PROTOBUF_NODISCARD std::string* release_total_kernel_offset();
  void set_allocated_total_kernel_offset(std::string* value);

  private:
  const std::string& _internal_total_kernel_offset() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_total_kernel_offset(
      const std::string& value);
  std::string* _internal_mutable_total_kernel_offset();

  public:
  // bytes total_script_offset = 15;
  void clear_total_script_offset() ;
  const std::string& total_script_offset() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_total_script_offset(Arg_&& arg, Args_... args);
  std::string* mutable_total_script_offset();
  PROTOBUF_NODISCARD std::string* release_total_script_offset();
  void set_allocated_total_script_offset(std::string* value);

  private:
  const std::string& _internal_total_script_offset() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_total_script_offset(
      const std::string& value);
  std::string* _internal_mutable_total_script_offset();

  public:
  // bytes validator_node_mr = 16;
  void clear_validator_node_mr() ;
  const std::string& validator_node_mr() const;
  template <typename Arg_ = const std::string&, typename... Args_>
  void set_validator_node_mr(Arg_&& arg, Args_... args);
  std::string* mutable_validator_node_mr();
  PROTOBUF_NODISCARD std::string* release_validator_node_mr();
  void set_allocated_validator_node_mr(std::string* value);

  private:
  const std::string& _internal_validator_node_mr() const;
  inline PROTOBUF_ALWAYS_INLINE void _internal_set_validator_node_mr(
      const std::string& value);
  std::string* _internal_mutable_validator_node_mr();

  public:
  // .tari.rpc.ProofOfWork pow = 12;
  bool has_pow() const;
  void clear_pow() ;
  const ::tari::rpc::ProofOfWork& pow() const;
  PROTOBUF_NODISCARD ::tari::rpc::ProofOfWork* release_pow();
  ::tari::rpc::ProofOfWork* mutable_pow();
  void set_allocated_pow(::tari::rpc::ProofOfWork* value);
  void unsafe_arena_set_allocated_pow(::tari::rpc::ProofOfWork* value);
  ::tari::rpc::ProofOfWork* unsafe_arena_release_pow();

  private:
  const ::tari::rpc::ProofOfWork& _internal_pow() const;
  ::tari::rpc::ProofOfWork* _internal_mutable_pow();

  public:
  // uint64 height = 3;
  void clear_height() ;
  ::uint64_t height() const;
  void set_height(::uint64_t value);

  private:
  ::uint64_t _internal_height() const;
  void _internal_set_height(::uint64_t value);

  public:
  // uint64 timestamp = 5;
  void clear_timestamp() ;
  ::uint64_t timestamp() const;
  void set_timestamp(::uint64_t value);

  private:
  ::uint64_t _internal_timestamp() const;
  void _internal_set_timestamp(::uint64_t value);

  public:
  // uint64 nonce = 11;
  void clear_nonce() ;
  ::uint64_t nonce() const;
  void set_nonce(::uint64_t value);

  private:
  ::uint64_t _internal_nonce() const;
  void _internal_set_nonce(::uint64_t value);

  public:
  // uint64 kernel_mmr_size = 13;
  void clear_kernel_mmr_size() ;
  ::uint64_t kernel_mmr_size() const;
  void set_kernel_mmr_size(::uint64_t value);

  private:
  ::uint64_t _internal_kernel_mmr_size() const;
  void _internal_set_kernel_mmr_size(::uint64_t value);

  public:
  // uint64 output_mmr_size = 14;
  void clear_output_mmr_size() ;
  ::uint64_t output_mmr_size() const;
  void set_output_mmr_size(::uint64_t value);

  private:
  ::uint64_t _internal_output_mmr_size() const;
  void _internal_set_output_mmr_size(::uint64_t value);

  public:
  // uint64 validator_node_size = 17;
  void clear_validator_node_size() ;
  ::uint64_t validator_node_size() const;
  void set_validator_node_size(::uint64_t value);

  private:
  ::uint64_t _internal_validator_node_size() const;
  void _internal_set_validator_node_size(::uint64_t value);

  public:
  // uint32 version = 2;
  void clear_version() ;
  ::uint32_t version() const;
  void set_version(::uint32_t value);

  private:
  ::uint32_t _internal_version() const;
  void _internal_set_version(::uint32_t value);

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.BlockHeader)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      5, 16, 1,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::google::protobuf::internal::ArenaStringPtr hash_;
    ::google::protobuf::internal::ArenaStringPtr prev_hash_;
    ::google::protobuf::internal::ArenaStringPtr output_mr_;
    ::google::protobuf::internal::ArenaStringPtr kernel_mr_;
    ::google::protobuf::internal::ArenaStringPtr input_mr_;
    ::google::protobuf::internal::ArenaStringPtr total_kernel_offset_;
    ::google::protobuf::internal::ArenaStringPtr total_script_offset_;
    ::google::protobuf::internal::ArenaStringPtr validator_node_mr_;
    ::tari::rpc::ProofOfWork* pow_;
    ::uint64_t height_;
    ::uint64_t timestamp_;
    ::uint64_t nonce_;
    ::uint64_t kernel_mmr_size_;
    ::uint64_t output_mmr_size_;
    ::uint64_t validator_node_size_;
    ::uint32_t version_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class NewBlockTemplate final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.NewBlockTemplate) */ {
 public:
  inline NewBlockTemplate() : NewBlockTemplate(nullptr) {}
  ~NewBlockTemplate() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR NewBlockTemplate(
      ::google::protobuf::internal::ConstantInitialized);

  inline NewBlockTemplate(const NewBlockTemplate& from) : NewBlockTemplate(nullptr, from) {}
  inline NewBlockTemplate(NewBlockTemplate&& from) noexcept
      : NewBlockTemplate(nullptr, std::move(from)) {}
  inline NewBlockTemplate& operator=(const NewBlockTemplate& from) {
    CopyFrom(from);
    return *this;
  }
  inline NewBlockTemplate& operator=(NewBlockTemplate&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const NewBlockTemplate& default_instance() {
    return *internal_default_instance();
  }
  static inline const NewBlockTemplate* internal_default_instance() {
    return reinterpret_cast<const NewBlockTemplate*>(
        &_NewBlockTemplate_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 6;
  friend void swap(NewBlockTemplate& a, NewBlockTemplate& b) { a.Swap(&b); }
  inline void Swap(NewBlockTemplate* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(NewBlockTemplate* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  NewBlockTemplate* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<NewBlockTemplate>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const NewBlockTemplate& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const NewBlockTemplate& from) { NewBlockTemplate::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(NewBlockTemplate* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.NewBlockTemplate"; }

 protected:
  explicit NewBlockTemplate(::google::protobuf::Arena* arena);
  NewBlockTemplate(::google::protobuf::Arena* arena, const NewBlockTemplate& from);
  NewBlockTemplate(::google::protobuf::Arena* arena, NewBlockTemplate&& from) noexcept
      : NewBlockTemplate(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kHeaderFieldNumber = 1,
    kBodyFieldNumber = 2,
  };
  // .tari.rpc.NewBlockHeaderTemplate header = 1;
  bool has_header() const;
  void clear_header() ;
  const ::tari::rpc::NewBlockHeaderTemplate& header() const;
  PROTOBUF_NODISCARD ::tari::rpc::NewBlockHeaderTemplate* release_header();
  ::tari::rpc::NewBlockHeaderTemplate* mutable_header();
  void set_allocated_header(::tari::rpc::NewBlockHeaderTemplate* value);
  void unsafe_arena_set_allocated_header(::tari::rpc::NewBlockHeaderTemplate* value);
  ::tari::rpc::NewBlockHeaderTemplate* unsafe_arena_release_header();

  private:
  const ::tari::rpc::NewBlockHeaderTemplate& _internal_header() const;
  ::tari::rpc::NewBlockHeaderTemplate* _internal_mutable_header();

  public:
  // .tari.rpc.AggregateBody body = 2;
  bool has_body() const;
  void clear_body() ;
  const ::tari::rpc::AggregateBody& body() const;
  PROTOBUF_NODISCARD ::tari::rpc::AggregateBody* release_body();
  ::tari::rpc::AggregateBody* mutable_body();
  void set_allocated_body(::tari::rpc::AggregateBody* value);
  void unsafe_arena_set_allocated_body(::tari::rpc::AggregateBody* value);
  ::tari::rpc::AggregateBody* unsafe_arena_release_body();

  private:
  const ::tari::rpc::AggregateBody& _internal_body() const;
  ::tari::rpc::AggregateBody* _internal_mutable_body();

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.NewBlockTemplate)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      1, 2, 2,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::tari::rpc::NewBlockHeaderTemplate* header_;
    ::tari::rpc::AggregateBody* body_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class Block final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.Block) */ {
 public:
  inline Block() : Block(nullptr) {}
  ~Block() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR Block(
      ::google::protobuf::internal::ConstantInitialized);

  inline Block(const Block& from) : Block(nullptr, from) {}
  inline Block(Block&& from) noexcept
      : Block(nullptr, std::move(from)) {}
  inline Block& operator=(const Block& from) {
    CopyFrom(from);
    return *this;
  }
  inline Block& operator=(Block&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const Block& default_instance() {
    return *internal_default_instance();
  }
  static inline const Block* internal_default_instance() {
    return reinterpret_cast<const Block*>(
        &_Block_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 3;
  friend void swap(Block& a, Block& b) { a.Swap(&b); }
  inline void Swap(Block* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(Block* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  Block* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<Block>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const Block& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const Block& from) { Block::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(Block* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.Block"; }

 protected:
  explicit Block(::google::protobuf::Arena* arena);
  Block(::google::protobuf::Arena* arena, const Block& from);
  Block(::google::protobuf::Arena* arena, Block&& from) noexcept
      : Block(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kHeaderFieldNumber = 1,
    kBodyFieldNumber = 2,
  };
  // .tari.rpc.BlockHeader header = 1;
  bool has_header() const;
  void clear_header() ;
  const ::tari::rpc::BlockHeader& header() const;
  PROTOBUF_NODISCARD ::tari::rpc::BlockHeader* release_header();
  ::tari::rpc::BlockHeader* mutable_header();
  void set_allocated_header(::tari::rpc::BlockHeader* value);
  void unsafe_arena_set_allocated_header(::tari::rpc::BlockHeader* value);
  ::tari::rpc::BlockHeader* unsafe_arena_release_header();

  private:
  const ::tari::rpc::BlockHeader& _internal_header() const;
  ::tari::rpc::BlockHeader* _internal_mutable_header();

  public:
  // .tari.rpc.AggregateBody body = 2;
  bool has_body() const;
  void clear_body() ;
  const ::tari::rpc::AggregateBody& body() const;
  PROTOBUF_NODISCARD ::tari::rpc::AggregateBody* release_body();
  ::tari::rpc::AggregateBody* mutable_body();
  void set_allocated_body(::tari::rpc::AggregateBody* value);
  void unsafe_arena_set_allocated_body(::tari::rpc::AggregateBody* value);
  ::tari::rpc::AggregateBody* unsafe_arena_release_body();

  private:
  const ::tari::rpc::AggregateBody& _internal_body() const;
  ::tari::rpc::AggregateBody* _internal_mutable_body();

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.Block)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      1, 2, 2,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::tari::rpc::BlockHeader* header_;
    ::tari::rpc::AggregateBody* body_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};
// -------------------------------------------------------------------

class HistoricalBlock final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.HistoricalBlock) */ {
 public:
  inline HistoricalBlock() : HistoricalBlock(nullptr) {}
  ~HistoricalBlock() override;
  template <typename = void>
  explicit PROTOBUF_CONSTEXPR HistoricalBlock(
      ::google::protobuf::internal::ConstantInitialized);

  inline HistoricalBlock(const HistoricalBlock& from) : HistoricalBlock(nullptr, from) {}
  inline HistoricalBlock(HistoricalBlock&& from) noexcept
      : HistoricalBlock(nullptr, std::move(from)) {}
  inline HistoricalBlock& operator=(const HistoricalBlock& from) {
    CopyFrom(from);
    return *this;
  }
  inline HistoricalBlock& operator=(HistoricalBlock&& from) noexcept {
    if (this == &from) return *this;
    if (GetArena() == from.GetArena()
#ifdef PROTOBUF_FORCE_COPY_IN_MOVE
        && GetArena() != nullptr
#endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
    ) {
      InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
  }
  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields()
      ABSL_ATTRIBUTE_LIFETIME_BOUND {
    return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
  }

  static const ::google::protobuf::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::google::protobuf::Descriptor* GetDescriptor() {
    return default_instance().GetMetadata().descriptor;
  }
  static const ::google::protobuf::Reflection* GetReflection() {
    return default_instance().GetMetadata().reflection;
  }
  static const HistoricalBlock& default_instance() {
    return *internal_default_instance();
  }
  static inline const HistoricalBlock* internal_default_instance() {
    return reinterpret_cast<const HistoricalBlock*>(
        &_HistoricalBlock_default_instance_);
  }
  static constexpr int kIndexInFileMessages = 4;
  friend void swap(HistoricalBlock& a, HistoricalBlock& b) { a.Swap(&b); }
  inline void Swap(HistoricalBlock* other) {
    if (other == this) return;
#ifdef PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() != nullptr && GetArena() == other->GetArena()) {
#else   // PROTOBUF_FORCE_COPY_IN_SWAP
    if (GetArena() == other->GetArena()) {
#endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
      InternalSwap(other);
    } else {
      ::google::protobuf::internal::GenericSwap(this, other);
    }
  }
  void UnsafeArenaSwap(HistoricalBlock* other) {
    if (other == this) return;
    ABSL_DCHECK(GetArena() == other->GetArena());
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  HistoricalBlock* New(::google::protobuf::Arena* arena = nullptr) const final {
    return ::google::protobuf::Message::DefaultConstruct<HistoricalBlock>(arena);
  }
  using ::google::protobuf::Message::CopyFrom;
  void CopyFrom(const HistoricalBlock& from);
  using ::google::protobuf::Message::MergeFrom;
  void MergeFrom(const HistoricalBlock& from) { HistoricalBlock::MergeImpl(*this, from); }

  private:
  static void MergeImpl(
      ::google::protobuf::MessageLite& to_msg,
      const ::google::protobuf::MessageLite& from_msg);

  public:
  ABSL_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  ::size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::google::protobuf::internal::ParseContext* ctx) final;
  ::uint8_t* _InternalSerialize(
      ::uint8_t* target,
      ::google::protobuf::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const { return _impl_._cached_size_.Get(); }

  private:
  void SharedCtor(::google::protobuf::Arena* arena);
  void SharedDtor();
  void InternalSwap(HistoricalBlock* other);
 private:
  friend class ::google::protobuf::internal::AnyMetadata;
  static ::absl::string_view FullMessageName() { return "tari.rpc.HistoricalBlock"; }

 protected:
  explicit HistoricalBlock(::google::protobuf::Arena* arena);
  HistoricalBlock(::google::protobuf::Arena* arena, const HistoricalBlock& from);
  HistoricalBlock(::google::protobuf::Arena* arena, HistoricalBlock&& from) noexcept
      : HistoricalBlock(arena) {
    *this = ::std::move(from);
  }
  const ::google::protobuf::MessageLite::ClassData* GetClassData()
      const final;

 public:
  ::google::protobuf::Metadata GetMetadata() const final;
  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------
  enum : int {
    kBlockFieldNumber = 2,
    kConfirmationsFieldNumber = 1,
  };
  // .tari.rpc.Block block = 2;
  bool has_block() const;
  void clear_block() ;
  const ::tari::rpc::Block& block() const;
  PROTOBUF_NODISCARD ::tari::rpc::Block* release_block();
  ::tari::rpc::Block* mutable_block();
  void set_allocated_block(::tari::rpc::Block* value);
  void unsafe_arena_set_allocated_block(::tari::rpc::Block* value);
  ::tari::rpc::Block* unsafe_arena_release_block();

  private:
  const ::tari::rpc::Block& _internal_block() const;
  ::tari::rpc::Block* _internal_mutable_block();

  public:
  // uint64 confirmations = 1;
  void clear_confirmations() ;
  ::uint64_t confirmations() const;
  void set_confirmations(::uint64_t value);

  private:
  ::uint64_t _internal_confirmations() const;
  void _internal_set_confirmations(::uint64_t value);

  public:
  // @@protoc_insertion_point(class_scope:tari.rpc.HistoricalBlock)
 private:
  class _Internal;
  friend class ::google::protobuf::internal::TcParser;
  static const ::google::protobuf::internal::TcParseTable<
      1, 2, 1,
      0, 2>
      _table_;
  friend class ::google::protobuf::MessageLite;
  friend class ::google::protobuf::Arena;
  template <typename T>
  friend class ::google::protobuf::Arena::InternalHelper;
  using InternalArenaConstructable_ = void;
  using DestructorSkippable_ = void;
  struct Impl_ {
    inline explicit constexpr Impl_(
        ::google::protobuf::internal::ConstantInitialized) noexcept;
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena);
    inline explicit Impl_(::google::protobuf::internal::InternalVisibility visibility,
                          ::google::protobuf::Arena* arena, const Impl_& from);
    ::google::protobuf::internal::HasBits<1> _has_bits_;
    mutable ::google::protobuf::internal::CachedSize _cached_size_;
    ::tari::rpc::Block* block_;
    ::uint64_t confirmations_;
    PROTOBUF_TSAN_DECLARE_MEMBER
  };
  union { Impl_ _impl_; };
  friend struct ::TableStruct_block_2eproto;
};

// ===================================================================




// ===================================================================


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// -------------------------------------------------------------------

// BlockHeader

// bytes hash = 1;
inline void BlockHeader::clear_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.hash_.ClearToEmpty();
}
inline const std::string& BlockHeader::hash() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.hash)
  return _internal_hash();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_hash(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.hash_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.hash)
}
inline std::string* BlockHeader::mutable_hash() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_hash();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.hash)
  return _s;
}
inline const std::string& BlockHeader::_internal_hash() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.hash_.Get();
}
inline void BlockHeader::_internal_set_hash(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.hash_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.hash_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.hash)
  return _impl_.hash_.Release();
}
inline void BlockHeader::set_allocated_hash(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.hash_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.hash_.IsDefault()) {
          _impl_.hash_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.hash)
}

// uint32 version = 2;
inline void BlockHeader::clear_version() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.version_ = 0u;
}
inline ::uint32_t BlockHeader::version() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.version)
  return _internal_version();
}
inline void BlockHeader::set_version(::uint32_t value) {
  _internal_set_version(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.version)
}
inline ::uint32_t BlockHeader::_internal_version() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.version_;
}
inline void BlockHeader::_internal_set_version(::uint32_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.version_ = value;
}

// uint64 height = 3;
inline void BlockHeader::clear_height() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.height_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::height() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.height)
  return _internal_height();
}
inline void BlockHeader::set_height(::uint64_t value) {
  _internal_set_height(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.height)
}
inline ::uint64_t BlockHeader::_internal_height() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.height_;
}
inline void BlockHeader::_internal_set_height(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.height_ = value;
}

// bytes prev_hash = 4;
inline void BlockHeader::clear_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.ClearToEmpty();
}
inline const std::string& BlockHeader::prev_hash() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.prev_hash)
  return _internal_prev_hash();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_prev_hash(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.prev_hash)
}
inline std::string* BlockHeader::mutable_prev_hash() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_prev_hash();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.prev_hash)
  return _s;
}
inline const std::string& BlockHeader::_internal_prev_hash() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.prev_hash_.Get();
}
inline void BlockHeader::_internal_set_prev_hash(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.prev_hash_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.prev_hash)
  return _impl_.prev_hash_.Release();
}
inline void BlockHeader::set_allocated_prev_hash(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.prev_hash_.IsDefault()) {
          _impl_.prev_hash_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.prev_hash)
}

// uint64 timestamp = 5;
inline void BlockHeader::clear_timestamp() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.timestamp_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::timestamp() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.timestamp)
  return _internal_timestamp();
}
inline void BlockHeader::set_timestamp(::uint64_t value) {
  _internal_set_timestamp(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.timestamp)
}
inline ::uint64_t BlockHeader::_internal_timestamp() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.timestamp_;
}
inline void BlockHeader::_internal_set_timestamp(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.timestamp_ = value;
}

// bytes output_mr = 6;
inline void BlockHeader::clear_output_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mr_.ClearToEmpty();
}
inline const std::string& BlockHeader::output_mr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.output_mr)
  return _internal_output_mr();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_output_mr(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mr_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.output_mr)
}
inline std::string* BlockHeader::mutable_output_mr() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_output_mr();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.output_mr)
  return _s;
}
inline const std::string& BlockHeader::_internal_output_mr() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.output_mr_.Get();
}
inline void BlockHeader::_internal_set_output_mr(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mr_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_output_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.output_mr_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_output_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.output_mr)
  return _impl_.output_mr_.Release();
}
inline void BlockHeader::set_allocated_output_mr(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mr_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.output_mr_.IsDefault()) {
          _impl_.output_mr_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.output_mr)
}

// bytes kernel_mr = 8;
inline void BlockHeader::clear_kernel_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mr_.ClearToEmpty();
}
inline const std::string& BlockHeader::kernel_mr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.kernel_mr)
  return _internal_kernel_mr();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_kernel_mr(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mr_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.kernel_mr)
}
inline std::string* BlockHeader::mutable_kernel_mr() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_kernel_mr();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.kernel_mr)
  return _s;
}
inline const std::string& BlockHeader::_internal_kernel_mr() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.kernel_mr_.Get();
}
inline void BlockHeader::_internal_set_kernel_mr(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mr_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_kernel_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.kernel_mr_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_kernel_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.kernel_mr)
  return _impl_.kernel_mr_.Release();
}
inline void BlockHeader::set_allocated_kernel_mr(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mr_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.kernel_mr_.IsDefault()) {
          _impl_.kernel_mr_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.kernel_mr)
}

// bytes input_mr = 9;
inline void BlockHeader::clear_input_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.input_mr_.ClearToEmpty();
}
inline const std::string& BlockHeader::input_mr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.input_mr)
  return _internal_input_mr();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_input_mr(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.input_mr_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.input_mr)
}
inline std::string* BlockHeader::mutable_input_mr() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_input_mr();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.input_mr)
  return _s;
}
inline const std::string& BlockHeader::_internal_input_mr() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.input_mr_.Get();
}
inline void BlockHeader::_internal_set_input_mr(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.input_mr_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_input_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.input_mr_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_input_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.input_mr)
  return _impl_.input_mr_.Release();
}
inline void BlockHeader::set_allocated_input_mr(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.input_mr_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.input_mr_.IsDefault()) {
          _impl_.input_mr_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.input_mr)
}

// bytes total_kernel_offset = 10;
inline void BlockHeader::clear_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.ClearToEmpty();
}
inline const std::string& BlockHeader::total_kernel_offset() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.total_kernel_offset)
  return _internal_total_kernel_offset();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_total_kernel_offset(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.total_kernel_offset)
}
inline std::string* BlockHeader::mutable_total_kernel_offset() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_total_kernel_offset();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.total_kernel_offset)
  return _s;
}
inline const std::string& BlockHeader::_internal_total_kernel_offset() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.total_kernel_offset_.Get();
}
inline void BlockHeader::_internal_set_total_kernel_offset(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.total_kernel_offset_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.total_kernel_offset)
  return _impl_.total_kernel_offset_.Release();
}
inline void BlockHeader::set_allocated_total_kernel_offset(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.total_kernel_offset_.IsDefault()) {
          _impl_.total_kernel_offset_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.total_kernel_offset)
}

// uint64 nonce = 11;
inline void BlockHeader::clear_nonce() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.nonce_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::nonce() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.nonce)
  return _internal_nonce();
}
inline void BlockHeader::set_nonce(::uint64_t value) {
  _internal_set_nonce(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.nonce)
}
inline ::uint64_t BlockHeader::_internal_nonce() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.nonce_;
}
inline void BlockHeader::_internal_set_nonce(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.nonce_ = value;
}

// .tari.rpc.ProofOfWork pow = 12;
inline bool BlockHeader::has_pow() const {
  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.pow_ != nullptr);
  return value;
}
inline void BlockHeader::clear_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.pow_ != nullptr) _impl_.pow_->Clear();
  _impl_._has_bits_[0] &= ~0x00000001u;
}
inline const ::tari::rpc::ProofOfWork& BlockHeader::_internal_pow() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::ProofOfWork* p = _impl_.pow_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::ProofOfWork&>(::tari::rpc::_ProofOfWork_default_instance_);
}
inline const ::tari::rpc::ProofOfWork& BlockHeader::pow() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.pow)
  return _internal_pow();
}
inline void BlockHeader::unsafe_arena_set_allocated_pow(::tari::rpc::ProofOfWork* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pow_);
  }
  _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.BlockHeader.pow)
}
inline ::tari::rpc::ProofOfWork* BlockHeader::release_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::ProofOfWork* released = _impl_.pow_;
  _impl_.pow_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::ProofOfWork* BlockHeader::unsafe_arena_release_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.pow)

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::ProofOfWork* temp = _impl_.pow_;
  _impl_.pow_ = nullptr;
  return temp;
}
inline ::tari::rpc::ProofOfWork* BlockHeader::_internal_mutable_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.pow_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::ProofOfWork>(GetArena());
    _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(p);
  }
  return _impl_.pow_;
}
inline ::tari::rpc::ProofOfWork* BlockHeader::mutable_pow() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000001u;
  ::tari::rpc::ProofOfWork* _msg = _internal_mutable_pow();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.pow)
  return _msg;
}
inline void BlockHeader::set_allocated_pow(::tari::rpc::ProofOfWork* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete (_impl_.pow_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = (value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }

  _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.pow)
}

// uint64 kernel_mmr_size = 13;
inline void BlockHeader::clear_kernel_mmr_size() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mmr_size_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::kernel_mmr_size() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.kernel_mmr_size)
  return _internal_kernel_mmr_size();
}
inline void BlockHeader::set_kernel_mmr_size(::uint64_t value) {
  _internal_set_kernel_mmr_size(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.kernel_mmr_size)
}
inline ::uint64_t BlockHeader::_internal_kernel_mmr_size() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.kernel_mmr_size_;
}
inline void BlockHeader::_internal_set_kernel_mmr_size(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.kernel_mmr_size_ = value;
}

// uint64 output_mmr_size = 14;
inline void BlockHeader::clear_output_mmr_size() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mmr_size_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::output_mmr_size() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.output_mmr_size)
  return _internal_output_mmr_size();
}
inline void BlockHeader::set_output_mmr_size(::uint64_t value) {
  _internal_set_output_mmr_size(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.output_mmr_size)
}
inline ::uint64_t BlockHeader::_internal_output_mmr_size() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.output_mmr_size_;
}
inline void BlockHeader::_internal_set_output_mmr_size(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.output_mmr_size_ = value;
}

// bytes total_script_offset = 15;
inline void BlockHeader::clear_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.ClearToEmpty();
}
inline const std::string& BlockHeader::total_script_offset() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.total_script_offset)
  return _internal_total_script_offset();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_total_script_offset(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.total_script_offset)
}
inline std::string* BlockHeader::mutable_total_script_offset() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_total_script_offset();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.total_script_offset)
  return _s;
}
inline const std::string& BlockHeader::_internal_total_script_offset() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.total_script_offset_.Get();
}
inline void BlockHeader::_internal_set_total_script_offset(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.total_script_offset_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.total_script_offset)
  return _impl_.total_script_offset_.Release();
}
inline void BlockHeader::set_allocated_total_script_offset(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.total_script_offset_.IsDefault()) {
          _impl_.total_script_offset_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.total_script_offset)
}

// bytes validator_node_mr = 16;
inline void BlockHeader::clear_validator_node_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_mr_.ClearToEmpty();
}
inline const std::string& BlockHeader::validator_node_mr() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.validator_node_mr)
  return _internal_validator_node_mr();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_validator_node_mr(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_mr_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.validator_node_mr)
}
inline std::string* BlockHeader::mutable_validator_node_mr() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_validator_node_mr();
  // @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.validator_node_mr)
  return _s;
}
inline const std::string& BlockHeader::_internal_validator_node_mr() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.validator_node_mr_.Get();
}
inline void BlockHeader::_internal_set_validator_node_mr(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_mr_.Set(value, GetArena());
}
inline std::string* BlockHeader::_internal_mutable_validator_node_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.validator_node_mr_.Mutable( GetArena());
}
inline std::string* BlockHeader::release_validator_node_mr() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.validator_node_mr)
  return _impl_.validator_node_mr_.Release();
}
inline void BlockHeader::set_allocated_validator_node_mr(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_mr_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.validator_node_mr_.IsDefault()) {
          _impl_.validator_node_mr_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.validator_node_mr)
}

// uint64 validator_node_size = 17;
inline void BlockHeader::clear_validator_node_size() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_size_ = ::uint64_t{0u};
}
inline ::uint64_t BlockHeader::validator_node_size() const {
  // @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.validator_node_size)
  return _internal_validator_node_size();
}
inline void BlockHeader::set_validator_node_size(::uint64_t value) {
  _internal_set_validator_node_size(value);
  // @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.validator_node_size)
}
inline ::uint64_t BlockHeader::_internal_validator_node_size() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.validator_node_size_;
}
inline void BlockHeader::_internal_set_validator_node_size(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.validator_node_size_ = value;
}

// -------------------------------------------------------------------

// ProofOfWork

// uint64 pow_algo = 1;
inline void ProofOfWork::clear_pow_algo() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_algo_ = ::uint64_t{0u};
}
inline ::uint64_t ProofOfWork::pow_algo() const {
  // @@protoc_insertion_point(field_get:tari.rpc.ProofOfWork.pow_algo)
  return _internal_pow_algo();
}
inline void ProofOfWork::set_pow_algo(::uint64_t value) {
  _internal_set_pow_algo(value);
  // @@protoc_insertion_point(field_set:tari.rpc.ProofOfWork.pow_algo)
}
inline ::uint64_t ProofOfWork::_internal_pow_algo() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.pow_algo_;
}
inline void ProofOfWork::_internal_set_pow_algo(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_algo_ = value;
}

// bytes pow_data = 4;
inline void ProofOfWork::clear_pow_data() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_data_.ClearToEmpty();
}
inline const std::string& ProofOfWork::pow_data() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.ProofOfWork.pow_data)
  return _internal_pow_data();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void ProofOfWork::set_pow_data(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_data_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.ProofOfWork.pow_data)
}
inline std::string* ProofOfWork::mutable_pow_data() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_pow_data();
  // @@protoc_insertion_point(field_mutable:tari.rpc.ProofOfWork.pow_data)
  return _s;
}
inline const std::string& ProofOfWork::_internal_pow_data() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.pow_data_.Get();
}
inline void ProofOfWork::_internal_set_pow_data(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_data_.Set(value, GetArena());
}
inline std::string* ProofOfWork::_internal_mutable_pow_data() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.pow_data_.Mutable( GetArena());
}
inline std::string* ProofOfWork::release_pow_data() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.ProofOfWork.pow_data)
  return _impl_.pow_data_.Release();
}
inline void ProofOfWork::set_allocated_pow_data(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_data_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.pow_data_.IsDefault()) {
          _impl_.pow_data_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.ProofOfWork.pow_data)
}

// -------------------------------------------------------------------

// PowAlgo

// .tari.rpc.PowAlgo.PowAlgos pow_algo = 1;
inline void PowAlgo::clear_pow_algo() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_algo_ = 0;
}
inline ::tari::rpc::PowAlgo_PowAlgos PowAlgo::pow_algo() const {
  // @@protoc_insertion_point(field_get:tari.rpc.PowAlgo.pow_algo)
  return _internal_pow_algo();
}
inline void PowAlgo::set_pow_algo(::tari::rpc::PowAlgo_PowAlgos value) {
  _internal_set_pow_algo(value);
  // @@protoc_insertion_point(field_set:tari.rpc.PowAlgo.pow_algo)
}
inline ::tari::rpc::PowAlgo_PowAlgos PowAlgo::_internal_pow_algo() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return static_cast<::tari::rpc::PowAlgo_PowAlgos>(_impl_.pow_algo_);
}
inline void PowAlgo::_internal_set_pow_algo(::tari::rpc::PowAlgo_PowAlgos value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.pow_algo_ = value;
}

// -------------------------------------------------------------------

// Block

// .tari.rpc.BlockHeader header = 1;
inline bool Block::has_header() const {
  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.header_ != nullptr);
  return value;
}
inline void Block::clear_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.header_ != nullptr) _impl_.header_->Clear();
  _impl_._has_bits_[0] &= ~0x00000001u;
}
inline const ::tari::rpc::BlockHeader& Block::_internal_header() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::BlockHeader* p = _impl_.header_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::BlockHeader&>(::tari::rpc::_BlockHeader_default_instance_);
}
inline const ::tari::rpc::BlockHeader& Block::header() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.Block.header)
  return _internal_header();
}
inline void Block::unsafe_arena_set_allocated_header(::tari::rpc::BlockHeader* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.header_);
  }
  _impl_.header_ = reinterpret_cast<::tari::rpc::BlockHeader*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.Block.header)
}
inline ::tari::rpc::BlockHeader* Block::release_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::BlockHeader* released = _impl_.header_;
  _impl_.header_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::BlockHeader* Block::unsafe_arena_release_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.Block.header)

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::BlockHeader* temp = _impl_.header_;
  _impl_.header_ = nullptr;
  return temp;
}
inline ::tari::rpc::BlockHeader* Block::_internal_mutable_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.header_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::BlockHeader>(GetArena());
    _impl_.header_ = reinterpret_cast<::tari::rpc::BlockHeader*>(p);
  }
  return _impl_.header_;
}
inline ::tari::rpc::BlockHeader* Block::mutable_header() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000001u;
  ::tari::rpc::BlockHeader* _msg = _internal_mutable_header();
  // @@protoc_insertion_point(field_mutable:tari.rpc.Block.header)
  return _msg;
}
inline void Block::set_allocated_header(::tari::rpc::BlockHeader* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete (_impl_.header_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = (value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }

  _impl_.header_ = reinterpret_cast<::tari::rpc::BlockHeader*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.Block.header)
}

// .tari.rpc.AggregateBody body = 2;
inline bool Block::has_body() const {
  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.body_ != nullptr);
  return value;
}
inline const ::tari::rpc::AggregateBody& Block::_internal_body() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::AggregateBody* p = _impl_.body_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::AggregateBody&>(::tari::rpc::_AggregateBody_default_instance_);
}
inline const ::tari::rpc::AggregateBody& Block::body() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.Block.body)
  return _internal_body();
}
inline void Block::unsafe_arena_set_allocated_body(::tari::rpc::AggregateBody* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.body_);
  }
  _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000002u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000002u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.Block.body)
}
inline ::tari::rpc::AggregateBody* Block::release_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000002u;
  ::tari::rpc::AggregateBody* released = _impl_.body_;
  _impl_.body_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::AggregateBody* Block::unsafe_arena_release_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.Block.body)

  _impl_._has_bits_[0] &= ~0x00000002u;
  ::tari::rpc::AggregateBody* temp = _impl_.body_;
  _impl_.body_ = nullptr;
  return temp;
}
inline ::tari::rpc::AggregateBody* Block::_internal_mutable_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.body_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::AggregateBody>(GetArena());
    _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(p);
  }
  return _impl_.body_;
}
inline ::tari::rpc::AggregateBody* Block::mutable_body() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000002u;
  ::tari::rpc::AggregateBody* _msg = _internal_mutable_body();
  // @@protoc_insertion_point(field_mutable:tari.rpc.Block.body)
  return _msg;
}
inline void Block::set_allocated_body(::tari::rpc::AggregateBody* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.body_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000002u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000002u;
  }

  _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.Block.body)
}

// -------------------------------------------------------------------

// HistoricalBlock

// uint64 confirmations = 1;
inline void HistoricalBlock::clear_confirmations() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.confirmations_ = ::uint64_t{0u};
}
inline ::uint64_t HistoricalBlock::confirmations() const {
  // @@protoc_insertion_point(field_get:tari.rpc.HistoricalBlock.confirmations)
  return _internal_confirmations();
}
inline void HistoricalBlock::set_confirmations(::uint64_t value) {
  _internal_set_confirmations(value);
  // @@protoc_insertion_point(field_set:tari.rpc.HistoricalBlock.confirmations)
}
inline ::uint64_t HistoricalBlock::_internal_confirmations() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.confirmations_;
}
inline void HistoricalBlock::_internal_set_confirmations(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.confirmations_ = value;
}

// .tari.rpc.Block block = 2;
inline bool HistoricalBlock::has_block() const {
  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.block_ != nullptr);
  return value;
}
inline void HistoricalBlock::clear_block() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.block_ != nullptr) _impl_.block_->Clear();
  _impl_._has_bits_[0] &= ~0x00000001u;
}
inline const ::tari::rpc::Block& HistoricalBlock::_internal_block() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::Block* p = _impl_.block_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::Block&>(::tari::rpc::_Block_default_instance_);
}
inline const ::tari::rpc::Block& HistoricalBlock::block() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.HistoricalBlock.block)
  return _internal_block();
}
inline void HistoricalBlock::unsafe_arena_set_allocated_block(::tari::rpc::Block* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.block_);
  }
  _impl_.block_ = reinterpret_cast<::tari::rpc::Block*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.HistoricalBlock.block)
}
inline ::tari::rpc::Block* HistoricalBlock::release_block() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::Block* released = _impl_.block_;
  _impl_.block_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::Block* HistoricalBlock::unsafe_arena_release_block() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.HistoricalBlock.block)

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::Block* temp = _impl_.block_;
  _impl_.block_ = nullptr;
  return temp;
}
inline ::tari::rpc::Block* HistoricalBlock::_internal_mutable_block() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.block_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::Block>(GetArena());
    _impl_.block_ = reinterpret_cast<::tari::rpc::Block*>(p);
  }
  return _impl_.block_;
}
inline ::tari::rpc::Block* HistoricalBlock::mutable_block() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000001u;
  ::tari::rpc::Block* _msg = _internal_mutable_block();
  // @@protoc_insertion_point(field_mutable:tari.rpc.HistoricalBlock.block)
  return _msg;
}
inline void HistoricalBlock::set_allocated_block(::tari::rpc::Block* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete (_impl_.block_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = (value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }

  _impl_.block_ = reinterpret_cast<::tari::rpc::Block*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.HistoricalBlock.block)
}

// -------------------------------------------------------------------

// NewBlockHeaderTemplate

// uint32 version = 1;
inline void NewBlockHeaderTemplate::clear_version() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.version_ = 0u;
}
inline ::uint32_t NewBlockHeaderTemplate::version() const {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.version)
  return _internal_version();
}
inline void NewBlockHeaderTemplate::set_version(::uint32_t value) {
  _internal_set_version(value);
  // @@protoc_insertion_point(field_set:tari.rpc.NewBlockHeaderTemplate.version)
}
inline ::uint32_t NewBlockHeaderTemplate::_internal_version() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.version_;
}
inline void NewBlockHeaderTemplate::_internal_set_version(::uint32_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.version_ = value;
}

// uint64 height = 2;
inline void NewBlockHeaderTemplate::clear_height() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.height_ = ::uint64_t{0u};
}
inline ::uint64_t NewBlockHeaderTemplate::height() const {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.height)
  return _internal_height();
}
inline void NewBlockHeaderTemplate::set_height(::uint64_t value) {
  _internal_set_height(value);
  // @@protoc_insertion_point(field_set:tari.rpc.NewBlockHeaderTemplate.height)
}
inline ::uint64_t NewBlockHeaderTemplate::_internal_height() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.height_;
}
inline void NewBlockHeaderTemplate::_internal_set_height(::uint64_t value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.height_ = value;
}

// bytes prev_hash = 3;
inline void NewBlockHeaderTemplate::clear_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.ClearToEmpty();
}
inline const std::string& NewBlockHeaderTemplate::prev_hash() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.prev_hash)
  return _internal_prev_hash();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void NewBlockHeaderTemplate::set_prev_hash(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.NewBlockHeaderTemplate.prev_hash)
}
inline std::string* NewBlockHeaderTemplate::mutable_prev_hash() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_prev_hash();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockHeaderTemplate.prev_hash)
  return _s;
}
inline const std::string& NewBlockHeaderTemplate::_internal_prev_hash() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.prev_hash_.Get();
}
inline void NewBlockHeaderTemplate::_internal_set_prev_hash(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.Set(value, GetArena());
}
inline std::string* NewBlockHeaderTemplate::_internal_mutable_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.prev_hash_.Mutable( GetArena());
}
inline std::string* NewBlockHeaderTemplate::release_prev_hash() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockHeaderTemplate.prev_hash)
  return _impl_.prev_hash_.Release();
}
inline void NewBlockHeaderTemplate::set_allocated_prev_hash(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.prev_hash_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.prev_hash_.IsDefault()) {
          _impl_.prev_hash_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockHeaderTemplate.prev_hash)
}

// bytes total_kernel_offset = 4;
inline void NewBlockHeaderTemplate::clear_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.ClearToEmpty();
}
inline const std::string& NewBlockHeaderTemplate::total_kernel_offset() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.total_kernel_offset)
  return _internal_total_kernel_offset();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void NewBlockHeaderTemplate::set_total_kernel_offset(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.NewBlockHeaderTemplate.total_kernel_offset)
}
inline std::string* NewBlockHeaderTemplate::mutable_total_kernel_offset() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_total_kernel_offset();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockHeaderTemplate.total_kernel_offset)
  return _s;
}
inline const std::string& NewBlockHeaderTemplate::_internal_total_kernel_offset() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.total_kernel_offset_.Get();
}
inline void NewBlockHeaderTemplate::_internal_set_total_kernel_offset(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.Set(value, GetArena());
}
inline std::string* NewBlockHeaderTemplate::_internal_mutable_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.total_kernel_offset_.Mutable( GetArena());
}
inline std::string* NewBlockHeaderTemplate::release_total_kernel_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockHeaderTemplate.total_kernel_offset)
  return _impl_.total_kernel_offset_.Release();
}
inline void NewBlockHeaderTemplate::set_allocated_total_kernel_offset(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_kernel_offset_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.total_kernel_offset_.IsDefault()) {
          _impl_.total_kernel_offset_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockHeaderTemplate.total_kernel_offset)
}

// .tari.rpc.ProofOfWork pow = 5;
inline bool NewBlockHeaderTemplate::has_pow() const {
  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.pow_ != nullptr);
  return value;
}
inline void NewBlockHeaderTemplate::clear_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.pow_ != nullptr) _impl_.pow_->Clear();
  _impl_._has_bits_[0] &= ~0x00000001u;
}
inline const ::tari::rpc::ProofOfWork& NewBlockHeaderTemplate::_internal_pow() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::ProofOfWork* p = _impl_.pow_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::ProofOfWork&>(::tari::rpc::_ProofOfWork_default_instance_);
}
inline const ::tari::rpc::ProofOfWork& NewBlockHeaderTemplate::pow() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.pow)
  return _internal_pow();
}
inline void NewBlockHeaderTemplate::unsafe_arena_set_allocated_pow(::tari::rpc::ProofOfWork* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.pow_);
  }
  _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.NewBlockHeaderTemplate.pow)
}
inline ::tari::rpc::ProofOfWork* NewBlockHeaderTemplate::release_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::ProofOfWork* released = _impl_.pow_;
  _impl_.pow_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::ProofOfWork* NewBlockHeaderTemplate::unsafe_arena_release_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockHeaderTemplate.pow)

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::ProofOfWork* temp = _impl_.pow_;
  _impl_.pow_ = nullptr;
  return temp;
}
inline ::tari::rpc::ProofOfWork* NewBlockHeaderTemplate::_internal_mutable_pow() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.pow_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::ProofOfWork>(GetArena());
    _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(p);
  }
  return _impl_.pow_;
}
inline ::tari::rpc::ProofOfWork* NewBlockHeaderTemplate::mutable_pow() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000001u;
  ::tari::rpc::ProofOfWork* _msg = _internal_mutable_pow();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockHeaderTemplate.pow)
  return _msg;
}
inline void NewBlockHeaderTemplate::set_allocated_pow(::tari::rpc::ProofOfWork* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete (_impl_.pow_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = (value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }

  _impl_.pow_ = reinterpret_cast<::tari::rpc::ProofOfWork*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockHeaderTemplate.pow)
}

// bytes total_script_offset = 7;
inline void NewBlockHeaderTemplate::clear_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.ClearToEmpty();
}
inline const std::string& NewBlockHeaderTemplate::total_script_offset() const
    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockHeaderTemplate.total_script_offset)
  return _internal_total_script_offset();
}
template <typename Arg_, typename... Args_>
inline PROTOBUF_ALWAYS_INLINE void NewBlockHeaderTemplate::set_total_script_offset(Arg_&& arg,
                                                     Args_... args) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
  // @@protoc_insertion_point(field_set:tari.rpc.NewBlockHeaderTemplate.total_script_offset)
}
inline std::string* NewBlockHeaderTemplate::mutable_total_script_offset() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  std::string* _s = _internal_mutable_total_script_offset();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockHeaderTemplate.total_script_offset)
  return _s;
}
inline const std::string& NewBlockHeaderTemplate::_internal_total_script_offset() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  return _impl_.total_script_offset_.Get();
}
inline void NewBlockHeaderTemplate::_internal_set_total_script_offset(const std::string& value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.Set(value, GetArena());
}
inline std::string* NewBlockHeaderTemplate::_internal_mutable_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  return _impl_.total_script_offset_.Mutable( GetArena());
}
inline std::string* NewBlockHeaderTemplate::release_total_script_offset() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockHeaderTemplate.total_script_offset)
  return _impl_.total_script_offset_.Release();
}
inline void NewBlockHeaderTemplate::set_allocated_total_script_offset(std::string* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  _impl_.total_script_offset_.SetAllocated(value, GetArena());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        if (_impl_.total_script_offset_.IsDefault()) {
          _impl_.total_script_offset_.Set("", GetArena());
        }
  #endif  // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockHeaderTemplate.total_script_offset)
}

// -------------------------------------------------------------------

// NewBlockTemplate

// .tari.rpc.NewBlockHeaderTemplate header = 1;
inline bool NewBlockTemplate::has_header() const {
  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.header_ != nullptr);
  return value;
}
inline void NewBlockTemplate::clear_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.header_ != nullptr) _impl_.header_->Clear();
  _impl_._has_bits_[0] &= ~0x00000001u;
}
inline const ::tari::rpc::NewBlockHeaderTemplate& NewBlockTemplate::_internal_header() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::NewBlockHeaderTemplate* p = _impl_.header_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::NewBlockHeaderTemplate&>(::tari::rpc::_NewBlockHeaderTemplate_default_instance_);
}
inline const ::tari::rpc::NewBlockHeaderTemplate& NewBlockTemplate::header() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockTemplate.header)
  return _internal_header();
}
inline void NewBlockTemplate::unsafe_arena_set_allocated_header(::tari::rpc::NewBlockHeaderTemplate* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.header_);
  }
  _impl_.header_ = reinterpret_cast<::tari::rpc::NewBlockHeaderTemplate*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.NewBlockTemplate.header)
}
inline ::tari::rpc::NewBlockHeaderTemplate* NewBlockTemplate::release_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::NewBlockHeaderTemplate* released = _impl_.header_;
  _impl_.header_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::NewBlockHeaderTemplate* NewBlockTemplate::unsafe_arena_release_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockTemplate.header)

  _impl_._has_bits_[0] &= ~0x00000001u;
  ::tari::rpc::NewBlockHeaderTemplate* temp = _impl_.header_;
  _impl_.header_ = nullptr;
  return temp;
}
inline ::tari::rpc::NewBlockHeaderTemplate* NewBlockTemplate::_internal_mutable_header() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.header_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::NewBlockHeaderTemplate>(GetArena());
    _impl_.header_ = reinterpret_cast<::tari::rpc::NewBlockHeaderTemplate*>(p);
  }
  return _impl_.header_;
}
inline ::tari::rpc::NewBlockHeaderTemplate* NewBlockTemplate::mutable_header() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000001u;
  ::tari::rpc::NewBlockHeaderTemplate* _msg = _internal_mutable_header();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockTemplate.header)
  return _msg;
}
inline void NewBlockTemplate::set_allocated_header(::tari::rpc::NewBlockHeaderTemplate* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete (_impl_.header_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = (value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000001u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000001u;
  }

  _impl_.header_ = reinterpret_cast<::tari::rpc::NewBlockHeaderTemplate*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockTemplate.header)
}

// .tari.rpc.AggregateBody body = 2;
inline bool NewBlockTemplate::has_body() const {
  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
  PROTOBUF_ASSUME(!value || _impl_.body_ != nullptr);
  return value;
}
inline const ::tari::rpc::AggregateBody& NewBlockTemplate::_internal_body() const {
  PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
  const ::tari::rpc::AggregateBody* p = _impl_.body_;
  return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::AggregateBody&>(::tari::rpc::_AggregateBody_default_instance_);
}
inline const ::tari::rpc::AggregateBody& NewBlockTemplate::body() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  // @@protoc_insertion_point(field_get:tari.rpc.NewBlockTemplate.body)
  return _internal_body();
}
inline void NewBlockTemplate::unsafe_arena_set_allocated_body(::tari::rpc::AggregateBody* value) {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (GetArena() == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.body_);
  }
  _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(value);
  if (value != nullptr) {
    _impl_._has_bits_[0] |= 0x00000002u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000002u;
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.NewBlockTemplate.body)
}
inline ::tari::rpc::AggregateBody* NewBlockTemplate::release_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);

  _impl_._has_bits_[0] &= ~0x00000002u;
  ::tari::rpc::AggregateBody* released = _impl_.body_;
  _impl_.body_ = nullptr;
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
  auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
  released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  if (GetArena() == nullptr) {
    delete old;
  }
#else   // PROTOBUF_FORCE_COPY_IN_RELEASE
  if (GetArena() != nullptr) {
    released = ::google::protobuf::internal::DuplicateIfNonNull(released);
  }
#endif  // !PROTOBUF_FORCE_COPY_IN_RELEASE
  return released;
}
inline ::tari::rpc::AggregateBody* NewBlockTemplate::unsafe_arena_release_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  // @@protoc_insertion_point(field_release:tari.rpc.NewBlockTemplate.body)

  _impl_._has_bits_[0] &= ~0x00000002u;
  ::tari::rpc::AggregateBody* temp = _impl_.body_;
  _impl_.body_ = nullptr;
  return temp;
}
inline ::tari::rpc::AggregateBody* NewBlockTemplate::_internal_mutable_body() {
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (_impl_.body_ == nullptr) {
    auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::AggregateBody>(GetArena());
    _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(p);
  }
  return _impl_.body_;
}
inline ::tari::rpc::AggregateBody* NewBlockTemplate::mutable_body() ABSL_ATTRIBUTE_LIFETIME_BOUND {
  _impl_._has_bits_[0] |= 0x00000002u;
  ::tari::rpc::AggregateBody* _msg = _internal_mutable_body();
  // @@protoc_insertion_point(field_mutable:tari.rpc.NewBlockTemplate.body)
  return _msg;
}
inline void NewBlockTemplate::set_allocated_body(::tari::rpc::AggregateBody* value) {
  ::google::protobuf::Arena* message_arena = GetArena();
  PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
  if (message_arena == nullptr) {
    delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.body_);
  }

  if (value != nullptr) {
    ::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena();
    if (message_arena != submessage_arena) {
      value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
    }
    _impl_._has_bits_[0] |= 0x00000002u;
  } else {
    _impl_._has_bits_[0] &= ~0x00000002u;
  }

  _impl_.body_ = reinterpret_cast<::tari::rpc::AggregateBody*>(value);
  // @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockTemplate.body)
}

#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif  // __GNUC__

// @@protoc_insertion_point(namespace_scope)
}  // namespace rpc
}  // namespace tari


namespace google {
namespace protobuf {

template <>
struct is_proto_enum<::tari::rpc::PowAlgo_PowAlgos> : std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor<::tari::rpc::PowAlgo_PowAlgos>() {
  return ::tari::rpc::PowAlgo_PowAlgos_descriptor();
}

}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)

#include "google/protobuf/port_undef.inc"

#endif  // GOOGLE_PROTOBUF_INCLUDED_block_2eproto_2epb_2eh
