// This file is @generated by prost-build.
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AccountWrapMockData {
    #[prost(int64, tag = "1")]
    pub mock_value: i64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct AlteredAccount {
    #[prost(string, tag = "1")]
    pub address: ::prost::alloc::string::String,
    #[prost(uint64, tag = "2")]
    pub nonce: u64,
    #[prost(string, tag = "3")]
    pub balance: ::prost::alloc::string::String,
    #[prost(message, repeated, tag = "4")]
    pub tokens: ::prost::alloc::vec::Vec<AccountTokenData>,
    #[prost(message, optional, tag = "5")]
    pub additional_data: ::core::option::Option<AdditionalAccountData>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AccountTokenData {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(string, tag = "2")]
    pub identifier: ::prost::alloc::string::String,
    #[prost(string, tag = "3")]
    pub balance: ::prost::alloc::string::String,
    #[prost(string, tag = "4")]
    pub properties: ::prost::alloc::string::String,
    #[prost(message, optional, tag = "5")]
    pub meta_data: ::core::option::Option<TokenMetaData>,
    #[prost(message, optional, tag = "6")]
    pub additional_data: ::core::option::Option<AdditionalAccountTokenData>,
    #[prost(string, tag = "7")]
    pub r#type: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TokenMetaData {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(string, tag = "2")]
    pub name: ::prost::alloc::string::String,
    #[prost(string, tag = "3")]
    pub creator: ::prost::alloc::string::String,
    #[prost(uint32, tag = "4")]
    pub royalties: u32,
    #[prost(bytes = "bytes", tag = "5")]
    pub hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "6")]
    pub ur_is: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(bytes = "bytes", tag = "7")]
    pub attributes: ::prost::bytes::Bytes,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AdditionalAccountTokenData {
    #[prost(bool, tag = "1")]
    pub is_nft_create: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct AdditionalAccountData {
    #[prost(bool, tag = "1")]
    pub is_sender: bool,
    #[prost(bool, tag = "2")]
    pub balance_changed: bool,
    #[prost(string, tag = "3")]
    pub current_owner: ::prost::alloc::string::String,
    #[prost(string, tag = "4")]
    pub user_name: ::prost::alloc::string::String,
    #[prost(string, tag = "5")]
    pub developer_rewards: ::prost::alloc::string::String,
    #[prost(bytes = "bytes", tag = "6")]
    pub code_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub code_metadata: ::prost::bytes::Bytes,
}
/// Transaction holds all the data needed for a value transfer or SC call
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Batch {
    #[prost(bytes = "bytes", repeated, tag = "1")]
    pub data: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(bytes = "bytes", tag = "2")]
    pub reference: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub chunk_index: u32,
    #[prost(uint32, tag = "4")]
    pub max_chunks: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniBlock {
    #[prost(bytes = "bytes", repeated, tag = "1")]
    pub tx_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "2")]
    pub receiver_shard_id: u32,
    #[prost(uint32, tag = "3")]
    pub sender_shard_id: u32,
    #[prost(enumeration = "Type", tag = "4")]
    pub r#type: i32,
    #[prost(bytes = "bytes", tag = "5")]
    pub reserved: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniBlockHeader {
    #[prost(bytes = "bytes", tag = "1")]
    pub hash: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub sender_shard_id: u32,
    #[prost(uint32, tag = "3")]
    pub receiver_shard_id: u32,
    #[prost(uint32, tag = "4")]
    pub tx_count: u32,
    #[prost(enumeration = "Type", tag = "5")]
    pub r#type: i32,
    #[prost(bytes = "bytes", tag = "6")]
    pub reserved: ::prost::bytes::Bytes,
}
/// PeerChange holds a change in one peer to shard assignation
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerChange {
    #[prost(bytes = "bytes", tag = "1")]
    pub pub_key: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub shard_id_dest: u32,
}
/// Header holds the metadata of a block. This is the part that is being hashed and run through consensus.
/// The header holds the hash of the body and also the link to the previous block header hash
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Header {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub prev_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub prev_rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub pub_keys_bitmap: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "6")]
    pub shard_id: u32,
    #[prost(uint64, tag = "7")]
    pub time_stamp: u64,
    #[prost(uint64, tag = "8")]
    pub round: u64,
    #[prost(uint32, tag = "9")]
    pub epoch: u32,
    #[prost(enumeration = "Type", tag = "10")]
    pub block_body_type: i32,
    #[prost(bytes = "bytes", tag = "11")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "12")]
    pub leader_signature: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "13")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(message, repeated, tag = "14")]
    pub peer_changes: ::prost::alloc::vec::Vec<PeerChange>,
    #[prost(bytes = "bytes", tag = "15")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "16")]
    pub meta_block_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "17")]
    pub tx_count: u32,
    #[prost(bytes = "bytes", tag = "18")]
    pub epoch_start_meta_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "19")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "20")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "21")]
    pub software_version: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "22")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "23")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "24")]
    pub reserved: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Body {
    #[prost(message, repeated, tag = "1")]
    pub mini_blocks: ::prost::alloc::vec::Vec<MiniBlock>,
}
/// BodyHeaderPair holds a body and header hash pair
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BodyHeaderPair {
    #[prost(bytes = "bytes", tag = "1")]
    pub body: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub header: ::prost::bytes::Bytes,
}
/// Type identifies the type of the block
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum Type {
    TxBlock = 0,
    StateBlock = 30,
    PeerBlock = 60,
    SmartContractResultBlock = 90,
    InvalidBlock = 120,
    ReceiptBlock = 150,
    RewardsBlock = 255,
}
impl Type {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::TxBlock => "TxBlock",
            Self::StateBlock => "StateBlock",
            Self::PeerBlock => "PeerBlock",
            Self::SmartContractResultBlock => "SmartContractResultBlock",
            Self::InvalidBlock => "InvalidBlock",
            Self::ReceiptBlock => "ReceiptBlock",
            Self::RewardsBlock => "RewardsBlock",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "TxBlock" => Some(Self::TxBlock),
            "StateBlock" => Some(Self::StateBlock),
            "PeerBlock" => Some(Self::PeerBlock),
            "SmartContractResultBlock" => Some(Self::SmartContractResultBlock),
            "InvalidBlock" => Some(Self::InvalidBlock),
            "ReceiptBlock" => Some(Self::ReceiptBlock),
            "RewardsBlock" => Some(Self::RewardsBlock),
            _ => None,
        }
    }
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ProcessingType {
    Normal = 0,
    Scheduled = 1,
    Processed = 2,
}
impl ProcessingType {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Normal => "Normal",
            Self::Scheduled => "Scheduled",
            Self::Processed => "Processed",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "Normal" => Some(Self::Normal),
            "Scheduled" => Some(Self::Scheduled),
            "Processed" => Some(Self::Processed),
            _ => None,
        }
    }
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum MiniBlockState {
    Final = 0,
    Proposed = 1,
    PartialExecuted = 2,
}
impl MiniBlockState {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Final => "Final",
            Self::Proposed => "Proposed",
            Self::PartialExecuted => "PartialExecuted",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "Final" => Some(Self::Final),
            "Proposed" => Some(Self::Proposed),
            "PartialExecuted" => Some(Self::PartialExecuted),
            _ => None,
        }
    }
}
/// HeaderV2 extends the Header structure with extra fields for version 2
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HeaderV2 {
    #[prost(message, optional, tag = "1")]
    pub header: ::core::option::Option<Header>,
    #[prost(bytes = "bytes", tag = "2")]
    pub scheduled_root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub scheduled_accumulated_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub scheduled_developer_fees: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "5")]
    pub scheduled_gas_provided: u64,
    #[prost(uint64, tag = "6")]
    pub scheduled_gas_penalized: u64,
    #[prost(uint64, tag = "7")]
    pub scheduled_gas_refunded: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniBlockReserved {
    #[prost(enumeration = "ProcessingType", tag = "1")]
    pub execution_type: i32,
    #[prost(bytes = "bytes", tag = "2")]
    pub transactions_type: ::prost::bytes::Bytes,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniBlockHeaderReserved {
    #[prost(enumeration = "ProcessingType", tag = "1")]
    pub execution_type: i32,
    #[prost(enumeration = "MiniBlockState", tag = "2")]
    pub state: i32,
    #[prost(int32, tag = "3")]
    pub index_of_first_tx_processed: i32,
    #[prost(int32, tag = "4")]
    pub index_of_last_tx_processed: i32,
}
/// BaseExecutionResult defines the dto that will hold base information about execution result
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BaseExecutionResult {
    #[prost(bytes = "bytes", tag = "1")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "2")]
    pub header_nonce: u64,
    #[prost(uint64, tag = "3")]
    pub header_round: u64,
    #[prost(uint32, tag = "4")]
    pub header_epoch: u32,
    #[prost(bytes = "bytes", tag = "5")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "6")]
    pub gas_used: u64,
}
/// ExecutionResultInfo contains a base execution result and the header round when the results was notarized
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ExecutionResultInfo {
    #[prost(uint64, tag = "1")]
    pub notarized_in_round: u64,
    #[prost(message, optional, tag = "2")]
    pub execution_result: ::core::option::Option<BaseExecutionResult>,
}
/// ExecutionResult defines the dto that will hold information about execution result
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ExecutionResult {
    #[prost(message, optional, tag = "1")]
    pub base_execution_result: ::core::option::Option<BaseExecutionResult>,
    #[prost(bytes = "bytes", tag = "2")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "3")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(bytes = "bytes", tag = "4")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "6")]
    pub executed_tx_count: u64,
}
/// BaseMetaExecutionResult contains a base execution result and additional validator and fee-related fields
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BaseMetaExecutionResult {
    #[prost(message, optional, tag = "1")]
    pub base_execution_result: ::core::option::Option<BaseExecutionResult>,
    #[prost(bytes = "bytes", tag = "2")]
    pub validator_stats_root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub accumulated_fees_in_epoch: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub dev_fees_in_epoch: ::prost::bytes::Bytes,
}
/// MetaExecutionResultInfo contains a base meta execution result and the header round when the results was notarized
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MetaExecutionResultInfo {
    #[prost(uint64, tag = "1")]
    pub notarized_in_round: u64,
    #[prost(message, optional, tag = "2")]
    pub execution_result: ::core::option::Option<BaseMetaExecutionResult>,
}
/// MetaExecutionResult contains a base meta execution result and extra fields for meta block results
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MetaExecutionResult {
    #[prost(message, optional, tag = "1")]
    pub execution_result: ::core::option::Option<BaseMetaExecutionResult>,
    #[prost(message, repeated, tag = "2")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(bytes = "bytes", tag = "3")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "6")]
    pub executed_tx_count: u64,
}
/// HeaderV3 defines the structure of the header V3
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct HeaderV3 {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub prev_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub prev_rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub rand_seed: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "5")]
    pub shard_id: u32,
    #[prost(uint64, tag = "6")]
    pub timestamp_ms: u64,
    #[prost(uint64, tag = "7")]
    pub round: u64,
    #[prost(uint32, tag = "8")]
    pub epoch: u32,
    #[prost(enumeration = "Type", tag = "9")]
    pub block_body_type: i32,
    #[prost(bytes = "bytes", tag = "10")]
    pub leader_signature: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "11")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(message, repeated, tag = "12")]
    pub peer_changes: ::prost::alloc::vec::Vec<PeerChange>,
    #[prost(bytes = "bytes", repeated, tag = "13")]
    pub meta_block_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "14")]
    pub tx_count: u32,
    #[prost(bytes = "bytes", tag = "15")]
    pub epoch_start_meta_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "16")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "17")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "18")]
    pub software_version: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "19")]
    pub reserved: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "20")]
    pub gas_limit: u32,
    #[prost(message, optional, tag = "21")]
    pub last_execution_result: ::core::option::Option<ExecutionResultInfo>,
    #[prost(message, repeated, tag = "22")]
    pub execution_results: ::prost::alloc::vec::Vec<ExecutionResult>,
}
/// MiniBlocksInMeta is used to store all mini blocks hashes for a metablock hash
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniBlocksInMeta {
    #[prost(bytes = "bytes", tag = "1")]
    pub meta_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "2")]
    pub mini_blocks_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(bool, repeated, tag = "3")]
    pub fully_processed: ::prost::alloc::vec::Vec<bool>,
    #[prost(int32, repeated, tag = "4")]
    pub index_of_last_tx_processed: ::prost::alloc::vec::Vec<i32>,
}
/// BootstrapHeaderInfo is used to store information about a header
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BootstrapHeaderInfo {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(uint64, tag = "3")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "4")]
    pub hash: ::prost::bytes::Bytes,
}
/// PendingMiniBlocksInfo is used to store information about the number of pending miniblocks
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PendingMiniBlocksInfo {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(bytes = "bytes", repeated, tag = "2")]
    pub mini_blocks_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
/// BootstrapData is used to store information that are needed for bootstrap
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BootstrapData {
    #[prost(message, optional, tag = "1")]
    pub last_header: ::core::option::Option<BootstrapHeaderInfo>,
    #[prost(message, repeated, tag = "2")]
    pub last_cross_notarized_headers: ::prost::alloc::vec::Vec<BootstrapHeaderInfo>,
    #[prost(message, repeated, tag = "7")]
    pub last_self_notarized_headers: ::prost::alloc::vec::Vec<BootstrapHeaderInfo>,
    #[prost(message, repeated, tag = "4")]
    pub processed_mini_blocks: ::prost::alloc::vec::Vec<MiniBlocksInMeta>,
    #[prost(message, repeated, tag = "8")]
    pub pending_mini_blocks: ::prost::alloc::vec::Vec<PendingMiniBlocksInfo>,
    #[prost(bytes = "bytes", tag = "9")]
    pub nodes_coordinator_config_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub epoch_start_trigger_config_key: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "5")]
    pub highest_final_block_nonce: u64,
    #[prost(int64, tag = "6")]
    pub last_round: i64,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RoundNum {
    #[prost(int64, tag = "1")]
    pub num: i64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CodeEntry {
    #[prost(bytes = "bytes", tag = "1")]
    pub code: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub num_references: u32,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OutportConfig {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(bool, tag = "2")]
    pub is_in_import_db_mode: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TrieLeafData {
    #[prost(bytes = "bytes", tag = "1")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub address: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegationManagement {
    #[prost(uint32, tag = "1")]
    pub num_of_contracts: u32,
    #[prost(bytes = "bytes", tag = "2")]
    pub last_address: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "3")]
    pub min_service_fee: u64,
    #[prost(uint64, tag = "4")]
    pub max_service_fee: u64,
    #[prost(bytes = "bytes", tag = "5")]
    pub min_deposit: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub min_delegation_amount: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegationContractList {
    #[prost(bytes = "bytes", repeated, tag = "1")]
    pub addresses: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegationConfig {
    #[prost(bytes = "bytes", tag = "1")]
    pub max_delegation_cap: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub initial_owner_funds: ::prost::bytes::Bytes,
    #[prost(bool, tag = "3")]
    pub automatic_activation: bool,
    #[prost(bool, tag = "4")]
    pub changeable_service_fee: bool,
    #[prost(uint64, tag = "5")]
    pub created_nonce: u64,
    #[prost(uint32, tag = "6")]
    pub un_bond_period_in_epochs: u32,
    #[prost(bool, tag = "7")]
    pub check_cap_on_re_delegate_rewards: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegationMetaData {
    #[prost(bytes = "bytes", tag = "1")]
    pub name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub website: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub identifier: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct DelegationContractStatus {
    #[prost(message, repeated, tag = "1")]
    pub staked_keys: ::prost::alloc::vec::Vec<NodesData>,
    #[prost(message, repeated, tag = "2")]
    pub not_staked_keys: ::prost::alloc::vec::Vec<NodesData>,
    #[prost(message, repeated, tag = "3")]
    pub un_staked_keys: ::prost::alloc::vec::Vec<NodesData>,
    #[prost(uint64, tag = "4")]
    pub num_users: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Fund {
    #[prost(bytes = "bytes", tag = "1")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub address: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub epoch: u32,
    #[prost(uint32, tag = "4")]
    pub r#type: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegatorData {
    #[prost(bytes = "bytes", tag = "1")]
    pub active_fund: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "2")]
    pub un_staked_funds: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "3")]
    pub rewards_checkpoint: u32,
    #[prost(bytes = "bytes", tag = "4")]
    pub un_claimed_rewards: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub total_cumulated_rewards: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GlobalFundData {
    #[prost(bytes = "bytes", tag = "1")]
    pub total_active: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub total_un_staked: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct NodesData {
    #[prost(bytes = "bytes", tag = "1")]
    pub bls_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub signed_msg: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RewardComputationData {
    #[prost(bytes = "bytes", tag = "1")]
    pub rewards_to_distribute: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub total_active: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "3")]
    pub service_fee: u64,
}
/// EpochByHash is used to store information about a hash to know which epoch it belongs to
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EpochByHash {
    #[prost(uint32, tag = "1")]
    pub epoch: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GeneralProposal {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub commit_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "3")]
    pub start_vote_epoch: u64,
    #[prost(uint64, tag = "4")]
    pub end_vote_epoch: u64,
    #[prost(bytes = "bytes", tag = "5")]
    pub yes: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub no: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub veto: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub abstain: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "9")]
    pub quorum_stake: ::prost::bytes::Bytes,
    #[prost(bool, tag = "10")]
    pub passed: bool,
    #[prost(bool, tag = "11")]
    pub closed: bool,
    #[prost(bytes = "bytes", tag = "12")]
    pub issuer_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "13")]
    pub proposal_cost: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GovernanceConfig {
    #[prost(int64, tag = "1")]
    pub num_nodes: i64,
    #[prost(int32, tag = "2")]
    pub min_quorum: i32,
    #[prost(int32, tag = "3")]
    pub min_pass_threshold: i32,
    #[prost(int32, tag = "4")]
    pub min_veto_threshold: i32,
    #[prost(bytes = "bytes", tag = "5")]
    pub proposal_fee: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct GovernanceConfigV2 {
    #[prost(float, tag = "1")]
    pub min_quorum: f32,
    #[prost(float, tag = "2")]
    pub min_pass_threshold: f32,
    #[prost(float, tag = "3")]
    pub min_veto_threshold: f32,
    #[prost(bytes = "bytes", tag = "4")]
    pub proposal_fee: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub lost_proposal_fee: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "6")]
    pub last_proposal_nonce: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct OngoingVotedList {
    #[prost(uint64, repeated, tag = "1")]
    pub direct: ::prost::alloc::vec::Vec<u64>,
    #[prost(uint64, repeated, tag = "2")]
    pub delegated: ::prost::alloc::vec::Vec<u64>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OngoingVotedListV2 {
    #[prost(uint64, repeated, tag = "1")]
    pub direct: ::prost::alloc::vec::Vec<u64>,
    #[prost(message, repeated, tag = "2")]
    pub delegated_with_address: ::prost::alloc::vec::Vec<DelegatedWithAddress>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegatedWithAddress {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub delegated_address: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DelegatedScVoteInfo {
    #[prost(bytes = "bytes", tag = "1")]
    pub total_power: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub used_power: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub total_stake: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub used_stake: ::prost::bytes::Bytes,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum VoteValueType {
    Yes = 0,
    No = 1,
    Veto = 2,
    Abstain = 3,
}
impl VoteValueType {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Yes => "Yes",
            Self::No => "No",
            Self::Veto => "Veto",
            Self::Abstain => "Abstain",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "Yes" => Some(Self::Yes),
            "No" => Some(Self::No),
            "Veto" => Some(Self::Veto),
            "Abstain" => Some(Self::Abstain),
            _ => None,
        }
    }
}
/// HeaderProof defines a proof for a specific header
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HeaderProof {
    #[prost(bytes = "bytes", tag = "1")]
    pub pub_keys_bitmap: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub aggregated_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "4")]
    pub header_epoch: u32,
    #[prost(uint64, tag = "5")]
    pub header_nonce: u64,
    #[prost(uint32, tag = "6")]
    pub header_shard_id: u32,
    #[prost(uint64, tag = "7")]
    pub header_round: u64,
    #[prost(bool, tag = "8")]
    pub is_start_of_epoch: bool,
}
/// HeartbeatV2 represents the heartbeat message that is sent between peers from the same shard containing
/// current node status
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HeartbeatV2 {
    #[prost(bytes = "bytes", tag = "1")]
    pub payload: ::prost::bytes::Bytes,
    #[prost(string, tag = "2")]
    pub version_number: ::prost::alloc::string::String,
    #[prost(string, tag = "3")]
    pub node_display_name: ::prost::alloc::string::String,
    #[prost(string, tag = "4")]
    pub identity: ::prost::alloc::string::String,
    #[prost(uint64, tag = "5")]
    pub nonce: u64,
    #[prost(uint32, tag = "6")]
    pub peer_sub_type: u32,
    #[prost(bytes = "bytes", tag = "7")]
    pub pubkey: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "8")]
    pub num_trie_nodes_synced: u64,
}
/// PeerAuthentication represents the DTO used to pass peer authentication information such as public key, peer id,
/// signature, payload and the signature. This message is used to link the peerID with the associated public key
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerAuthentication {
    #[prost(bytes = "bytes", tag = "1")]
    pub pubkey: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub pid: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub payload: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub payload_signature: ::prost::bytes::Bytes,
}
/// Payload represents the DTO used as payload for both HeartbeatV2 and PeerAuthentication messages
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Payload {
    #[prost(int64, tag = "1")]
    pub timestamp: i64,
    #[prost(string, tag = "2")]
    pub hardfork_message: ::prost::alloc::string::String,
}
/// Event holds all the data needed for an event structure
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Event {
    #[prost(bytes = "bytes", tag = "1")]
    pub address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub identifier: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "3")]
    pub topics: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(bytes = "bytes", tag = "4")]
    pub data: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "5")]
    pub additional_data: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
/// Log holds all the data needed for a log structure
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Log {
    #[prost(bytes = "bytes", tag = "1")]
    pub address: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "2")]
    pub events: ::prost::alloc::vec::Vec<Event>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct LogData {
    #[prost(string, tag = "1")]
    pub tx_hash: ::prost::alloc::string::String,
    #[prost(message, optional, tag = "2")]
    pub log: ::core::option::Option<Log>,
}
/// Message defines the data needed by spos to communicate between nodes over network in all subrounds
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Message {
    #[prost(bytes = "bytes", tag = "1")]
    pub block_header_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub signature_share: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub body: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub header: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub pub_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(int64, tag = "7")]
    pub msg_type: i64,
    #[prost(int64, tag = "8")]
    pub round_index: i64,
    #[prost(bytes = "bytes", tag = "9")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub pub_keys_bitmap: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "11")]
    pub aggregate_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "12")]
    pub leader_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "13")]
    pub originator_pid: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "14")]
    pub invalid_signers: ::prost::bytes::Bytes,
}
/// PeerData holds information about actions taken by a peer:
///
/// * a peer can register with an amount to become a validator
/// * a peer can choose to deregister and get back the deposited value
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerData {
    #[prost(bytes = "bytes", tag = "1")]
    pub address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub public_key: ::prost::bytes::Bytes,
    #[prost(enumeration = "PeerAction", tag = "3")]
    pub action: i32,
    #[prost(uint64, tag = "4")]
    pub time_stamp: u64,
    #[prost(bytes = "bytes", tag = "5")]
    pub value_change: ::prost::bytes::Bytes,
}
/// ShardData holds the block information sent by the shards to the metachain
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ShardData {
    #[prost(bytes = "bytes", tag = "2")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "3")]
    pub shard_mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(bytes = "bytes", tag = "4")]
    pub prev_rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub pub_keys_bitmap: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "8")]
    pub round: u64,
    #[prost(bytes = "bytes", tag = "9")]
    pub prev_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "10")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "12")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "14")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "11")]
    pub num_pending_mini_blocks: u32,
    #[prost(uint64, tag = "13")]
    pub last_included_meta_nonce: u64,
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(uint32, tag = "7")]
    pub tx_count: u32,
    #[prost(uint32, tag = "15")]
    pub epoch: u32,
}
/// EpochStartShardData hold the last finalized headers hash and state root hash
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EpochStartShardData {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(uint32, tag = "9")]
    pub epoch: u32,
    #[prost(uint64, tag = "7")]
    pub round: u64,
    #[prost(uint64, tag = "8")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub scheduled_root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub first_pending_meta_block: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub last_finished_meta_block: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "6")]
    pub pending_mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
}
/// Economics holds the block information for total supply and rewards
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Economics {
    #[prost(bytes = "bytes", tag = "1")]
    pub total_supply: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub total_to_distribute: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub total_newly_minted: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub rewards_per_block: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub rewards_for_protocol_sustainability: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub node_price: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "7")]
    pub prev_epoch_start_round: u64,
    #[prost(bytes = "bytes", tag = "8")]
    pub prev_epoch_start_hash: ::prost::bytes::Bytes,
}
/// EpochStart holds the block information for end-of-epoch
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EpochStart {
    #[prost(message, repeated, tag = "1")]
    pub last_finalized_headers: ::prost::alloc::vec::Vec<EpochStartShardData>,
    #[prost(message, optional, tag = "2")]
    pub economics: ::core::option::Option<Economics>,
}
/// MetaBlock holds the data that will be saved to the metachain each round
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MetaBlock {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(uint64, tag = "3")]
    pub round: u64,
    #[prost(uint64, tag = "4")]
    pub time_stamp: u64,
    #[prost(message, repeated, tag = "5")]
    pub shard_info: ::prost::alloc::vec::Vec<ShardData>,
    #[prost(message, repeated, tag = "6")]
    pub peer_info: ::prost::alloc::vec::Vec<PeerData>,
    #[prost(bytes = "bytes", tag = "7")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub leader_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "9")]
    pub pub_keys_bitmap: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub prev_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "11")]
    pub prev_rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "12")]
    pub rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "13")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "14")]
    pub validator_stats_root_hash: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "16")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(bytes = "bytes", tag = "17")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(message, optional, tag = "18")]
    pub epoch_start: ::core::option::Option<EpochStart>,
    #[prost(bytes = "bytes", tag = "19")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "20")]
    pub software_version: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "21")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "22")]
    pub accumulated_fees_in_epoch: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "23")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "24")]
    pub dev_fees_in_epoch: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "25")]
    pub tx_count: u32,
    #[prost(bytes = "bytes", tag = "26")]
    pub reserved: ::prost::bytes::Bytes,
}
/// PeerAction type represents the possible events that a node can trigger for the metachain to notarize
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum PeerAction {
    InvalidAction = 0,
    PeerRegistration = 1,
    PeerUnstaking = 2,
    PeerDeregistration = 3,
    PeerJailed = 4,
    PeerUnJailed = 5,
    PeerSlashed = 6,
    PeerReStake = 7,
}
impl PeerAction {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::InvalidAction => "InvalidAction",
            Self::PeerRegistration => "PeerRegistration",
            Self::PeerUnstaking => "PeerUnstaking",
            Self::PeerDeregistration => "PeerDeregistration",
            Self::PeerJailed => "PeerJailed",
            Self::PeerUnJailed => "PeerUnJailed",
            Self::PeerSlashed => "PeerSlashed",
            Self::PeerReStake => "PeerReStake",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "InvalidAction" => Some(Self::InvalidAction),
            "PeerRegistration" => Some(Self::PeerRegistration),
            "PeerUnstaking" => Some(Self::PeerUnstaking),
            "PeerDeregistration" => Some(Self::PeerDeregistration),
            "PeerJailed" => Some(Self::PeerJailed),
            "PeerUnJailed" => Some(Self::PeerUnJailed),
            "PeerSlashed" => Some(Self::PeerSlashed),
            "PeerReStake" => Some(Self::PeerReStake),
            _ => None,
        }
    }
}
/// MetaBlockV3 holds all the fields needed for a meta block v3. This is the part that is being hashed and run through consensus.
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MetaBlockV3 {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(uint64, tag = "3")]
    pub round: u64,
    #[prost(uint64, tag = "4")]
    pub timestamp_ms: u64,
    #[prost(message, repeated, tag = "5")]
    pub shard_info: ::prost::alloc::vec::Vec<ShardData>,
    #[prost(message, repeated, tag = "6")]
    pub peer_info: ::prost::alloc::vec::Vec<PeerData>,
    #[prost(bytes = "bytes", tag = "7")]
    pub leader_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub prev_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "9")]
    pub prev_rand_seed: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub rand_seed: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "11")]
    pub mini_block_headers: ::prost::alloc::vec::Vec<MiniBlockHeader>,
    #[prost(bool, tag = "12")]
    pub epoch_change_proposed: bool,
    #[prost(message, optional, tag = "13")]
    pub epoch_start: ::core::option::Option<EpochStart>,
    #[prost(bytes = "bytes", tag = "14")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "15")]
    pub software_version: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "16")]
    pub reserved: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "17")]
    pub gas_limit: u64,
    #[prost(uint32, tag = "18")]
    pub tx_count: u32,
    #[prost(message, optional, tag = "19")]
    pub last_execution_result: ::core::option::Option<MetaExecutionResultInfo>,
    #[prost(message, repeated, tag = "20")]
    pub execution_results: ::prost::alloc::vec::Vec<MetaExecutionResult>,
    #[prost(message, repeated, tag = "21")]
    pub shard_info_proposal: ::prost::alloc::vec::Vec<ShardDataProposal>,
}
/// ShardDataProposal holds the block information proposed by the shards
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ShardDataProposal {
    #[prost(bytes = "bytes", tag = "1")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "2")]
    pub round: u64,
    #[prost(uint64, tag = "3")]
    pub nonce: u64,
    #[prost(uint32, tag = "4")]
    pub shard_id: u32,
    #[prost(uint32, tag = "5")]
    pub epoch: u32,
    #[prost(uint32, tag = "6")]
    pub num_pending_mini_blocks: u32,
}
/// MiniblockMetadata is used to store information about a history transaction
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct MiniblockMetadata {
    #[prost(uint32, tag = "1")]
    pub source_shard_id: u32,
    #[prost(uint32, tag = "2")]
    pub destination_shard_id: u32,
    #[prost(uint64, tag = "3")]
    pub round: u64,
    #[prost(uint64, tag = "4")]
    pub header_nonce: u64,
    #[prost(bytes = "bytes", tag = "5")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub miniblock_hash: ::prost::bytes::Bytes,
    #[deprecated]
    #[prost(bytes = "bytes", tag = "7")]
    pub deprecated_status: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "8")]
    pub epoch: u32,
    #[prost(uint64, tag = "9")]
    pub notarized_at_source_in_meta_nonce: u64,
    #[prost(uint64, tag = "10")]
    pub notarized_at_destination_in_meta_nonce: u64,
    #[prost(bytes = "bytes", tag = "11")]
    pub notarized_at_source_in_meta_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "12")]
    pub notarized_at_destination_in_meta_hash: ::prost::bytes::Bytes,
    #[prost(int32, tag = "13")]
    pub r#type: i32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SerializableValidator {
    #[prost(bytes = "bytes", tag = "1")]
    pub pub_key: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub chances: u32,
    #[prost(uint32, tag = "3")]
    pub index: u32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Validators {
    #[prost(message, repeated, tag = "1")]
    pub data: ::prost::alloc::vec::Vec<SerializableValidator>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EpochValidatorsWithAuction {
    #[prost(map = "string, message", tag = "1")]
    pub eligible: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        Validators,
    >,
    #[prost(map = "string, message", tag = "2")]
    pub waiting: ::std::collections::HashMap<::prost::alloc::string::String, Validators>,
    #[prost(map = "string, message", tag = "3")]
    pub leaving: ::std::collections::HashMap<::prost::alloc::string::String, Validators>,
    #[prost(map = "string, message", tag = "4")]
    pub shuffled_out: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        Validators,
    >,
    #[prost(bool, tag = "5")]
    pub low_waiting_list: bool,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct NodesCoordinatorRegistryWithAuction {
    #[prost(uint32, tag = "1")]
    pub current_epoch: u32,
    #[prost(map = "string, message", tag = "2")]
    pub epochs_config_with_auction: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        EpochValidatorsWithAuction,
    >,
}
/// Transaction holds all the data needed for a value transfer or SC call
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Transaction {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub rcv_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub rcv_user_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub snd_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub snd_user_name: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "7")]
    pub gas_price: u64,
    #[prost(uint64, tag = "8")]
    pub gas_limit: u64,
    #[prost(bytes = "bytes", tag = "9")]
    pub data: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub chain_id: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "11")]
    pub version: u32,
    #[prost(bytes = "bytes", tag = "12")]
    pub signature: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "13")]
    pub options: u32,
    #[prost(bytes = "bytes", tag = "14")]
    pub guardian_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "15")]
    pub guardian_signature: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "16")]
    pub relayer_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "17")]
    pub relayer_signature: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SmartContractResult {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub rcv_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub snd_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub relayer_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub relayed_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub code: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub data: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "9")]
    pub prev_tx_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "10")]
    pub original_tx_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "11")]
    pub gas_limit: u64,
    #[prost(uint64, tag = "12")]
    pub gas_price: u64,
    #[prost(int64, tag = "13")]
    pub call_type: i64,
    #[prost(bytes = "bytes", tag = "14")]
    pub code_metadata: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "15")]
    pub return_message: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "16")]
    pub original_sender: ::prost::bytes::Bytes,
}
/// Receipt holds all the data needed for a transaction receipt
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Receipt {
    #[prost(bytes = "bytes", tag = "1")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub snd_addr: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub data: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub tx_hash: ::prost::bytes::Bytes,
}
/// RewardTx holds the data for a reward transaction
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RewardTx {
    #[prost(uint64, tag = "1")]
    pub round: u64,
    #[prost(bytes = "bytes", tag = "3")]
    pub value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub rcv_addr: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StateAccesses {
    #[prost(message, repeated, tag = "1")]
    pub state_access: ::prost::alloc::vec::Vec<StateAccess>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StateAccess {
    #[prost(enumeration = "ActionType", tag = "1")]
    pub r#type: i32,
    #[prost(int32, tag = "2")]
    pub index: i32,
    #[prost(bytes = "bytes", tag = "3")]
    pub tx_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub main_trie_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub main_trie_val: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "6")]
    pub operation: u32,
    #[prost(message, repeated, tag = "7")]
    pub data_trie_changes: ::prost::alloc::vec::Vec<DataTrieChange>,
    #[prost(uint32, tag = "8")]
    pub account_changes: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct DataTrieChange {
    #[prost(enumeration = "ActionType", tag = "1")]
    pub r#type: i32,
    #[prost(bytes = "bytes", tag = "2")]
    pub key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub val: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "4")]
    pub version: u32,
    #[prost(uint32, tag = "5")]
    pub operation: u32,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum ActionType {
    Read = 0,
    Write = 1,
}
impl ActionType {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::Read => "Read",
            Self::Write => "Write",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "Read" => Some(Self::Read),
            "Write" => Some(Self::Write),
            _ => None,
        }
    }
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct StateAccessesForBlock {
    #[prost(map = "string, message", tag = "1")]
    pub state_accesses: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        StateAccesses,
    >,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct OutportBlock {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(message, optional, tag = "2")]
    pub block_data: ::core::option::Option<BlockData>,
    #[prost(message, optional, tag = "3")]
    pub transaction_pool: ::core::option::Option<TransactionPool>,
    #[prost(message, optional, tag = "4")]
    pub header_gas_consumption: ::core::option::Option<HeaderGasConsumption>,
    #[prost(map = "string, message", tag = "5")]
    pub altered_accounts: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        AlteredAccount,
    >,
    #[prost(string, repeated, tag = "6")]
    pub notarized_headers_hashes: ::prost::alloc::vec::Vec<
        ::prost::alloc::string::String,
    >,
    #[prost(uint32, tag = "7")]
    pub number_of_shards: u32,
    #[prost(uint64, repeated, tag = "8")]
    pub signers_indexes: ::prost::alloc::vec::Vec<u64>,
    #[prost(uint64, tag = "9")]
    pub highest_final_block_nonce: u64,
    #[prost(bytes = "bytes", tag = "10")]
    pub highest_final_block_hash: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "11")]
    pub leader_index: u64,
    #[prost(bytes = "bytes", tag = "12")]
    pub leader_bls_key: ::prost::bytes::Bytes,
    #[prost(map = "string, message", tag = "13")]
    pub state_accesses: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        StateAccesses,
    >,
    #[prost(map = "string, message", tag = "14")]
    pub state_accesses_for_block: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        StateAccessesForBlock,
    >,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct BlockData {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(bytes = "bytes", tag = "2")]
    pub header_bytes: ::prost::bytes::Bytes,
    #[prost(string, tag = "3")]
    pub header_type: ::prost::alloc::string::String,
    #[prost(bytes = "bytes", tag = "4")]
    pub header_hash: ::prost::bytes::Bytes,
    #[prost(message, optional, tag = "5")]
    pub body: ::core::option::Option<Body>,
    #[prost(message, repeated, tag = "6")]
    pub intra_shard_mini_blocks: ::prost::alloc::vec::Vec<MiniBlock>,
    #[prost(message, optional, tag = "7")]
    pub header_proof: ::core::option::Option<HeaderProof>,
    #[prost(uint64, tag = "8")]
    pub timestamp_ms: u64,
    #[prost(map = "string, message", tag = "9")]
    pub results: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        ExecutionResultData,
    >,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ExecutionResultData {
    #[prost(uint64, tag = "1")]
    pub header_nonce: u64,
    #[prost(uint64, tag = "2")]
    pub timestamp_ms: u64,
    #[prost(message, optional, tag = "3")]
    pub body: ::core::option::Option<Body>,
    #[prost(message, repeated, tag = "4")]
    pub intra_shard_mini_blocks: ::prost::alloc::vec::Vec<MiniBlock>,
    #[prost(message, optional, tag = "5")]
    pub transaction_pool: ::core::option::Option<TransactionPool>,
    #[prost(map = "string, message", tag = "6")]
    pub altered_accounts: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        AlteredAccount,
    >,
    #[prost(message, optional, tag = "7")]
    pub header_gas_consumption: ::core::option::Option<HeaderGasConsumption>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct TransactionPool {
    #[prost(map = "string, message", tag = "1")]
    pub transactions: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        TxInfo,
    >,
    #[prost(map = "string, message", tag = "2")]
    pub smart_contract_results: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        ScrInfo,
    >,
    #[prost(map = "string, message", tag = "3")]
    pub rewards: ::std::collections::HashMap<::prost::alloc::string::String, RewardInfo>,
    #[prost(map = "string, message", tag = "4")]
    pub receipts: ::std::collections::HashMap<::prost::alloc::string::String, Receipt>,
    #[prost(map = "string, message", tag = "5")]
    pub invalid_txs: ::std::collections::HashMap<::prost::alloc::string::String, TxInfo>,
    #[prost(message, repeated, tag = "6")]
    pub logs: ::prost::alloc::vec::Vec<LogData>,
    #[prost(string, repeated, tag = "7")]
    pub scheduled_executed_scrs_hashes_prev_block: ::prost::alloc::vec::Vec<
        ::prost::alloc::string::String,
    >,
    #[prost(string, repeated, tag = "8")]
    pub scheduled_executed_invalid_txs_hashes_prev_block: ::prost::alloc::vec::Vec<
        ::prost::alloc::string::String,
    >,
    #[prost(map = "string, message", tag = "9")]
    pub unexecutable_transactions: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        Transaction,
    >,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct FeeInfo {
    #[prost(uint64, tag = "1")]
    pub gas_used: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub fee: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub initial_paid_fee: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "4")]
    pub gas_refunded: u64,
    #[prost(bool, tag = "5")]
    pub had_refund: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TxInfo {
    #[prost(message, optional, tag = "1")]
    pub transaction: ::core::option::Option<Transaction>,
    #[prost(message, optional, tag = "2")]
    pub fee_info: ::core::option::Option<FeeInfo>,
    #[prost(uint32, tag = "3")]
    pub execution_order: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ScrInfo {
    #[prost(message, optional, tag = "1")]
    pub smart_contract_result: ::core::option::Option<SmartContractResult>,
    #[prost(message, optional, tag = "2")]
    pub fee_info: ::core::option::Option<FeeInfo>,
    #[prost(uint32, tag = "3")]
    pub execution_order: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RewardInfo {
    #[prost(message, optional, tag = "1")]
    pub reward: ::core::option::Option<RewardTx>,
    #[prost(uint32, tag = "2")]
    pub execution_order: u32,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct HeaderGasConsumption {
    #[prost(uint64, tag = "1")]
    pub gas_provided: u64,
    #[prost(uint64, tag = "2")]
    pub gas_refunded: u64,
    #[prost(uint64, tag = "3")]
    pub gas_penalized: u64,
    #[prost(uint64, tag = "4")]
    pub max_gas_per_block: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorRatingInfo {
    #[prost(string, tag = "1")]
    pub public_key: ::prost::alloc::string::String,
    #[prost(float, tag = "2")]
    pub rating: f32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorsRating {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(message, repeated, tag = "3")]
    pub validators_rating_info: ::prost::alloc::vec::Vec<ValidatorRatingInfo>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RoundInfo {
    #[prost(uint64, tag = "1")]
    pub round: u64,
    #[prost(uint64, repeated, tag = "2")]
    pub signers_indexes: ::prost::alloc::vec::Vec<u64>,
    #[prost(bool, tag = "3")]
    pub block_was_proposed: bool,
    #[prost(uint32, tag = "4")]
    pub shard_id: u32,
    #[prost(uint32, tag = "5")]
    pub epoch: u32,
    #[prost(uint64, tag = "6")]
    pub timestamp: u64,
    #[prost(uint64, tag = "7")]
    pub timestamp_ms: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct RoundsInfo {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(message, repeated, tag = "2")]
    pub rounds_info: ::prost::alloc::vec::Vec<RoundInfo>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PubKeys {
    #[prost(bytes = "bytes", repeated, tag = "1")]
    pub keys: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorsPubKeys {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(map = "uint32, message", tag = "2")]
    pub shard_validators_pub_keys: ::std::collections::HashMap<u32, PubKeys>,
    #[prost(uint32, tag = "3")]
    pub epoch: u32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct Accounts {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(uint64, tag = "2")]
    pub block_timestamp: u64,
    #[prost(map = "string, message", tag = "3")]
    pub altered_accounts: ::std::collections::HashMap<
        ::prost::alloc::string::String,
        AlteredAccount,
    >,
    #[prost(uint64, tag = "4")]
    pub block_timestamp_ms: u64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct FinalizedBlock {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
    #[prost(bytes = "bytes", tag = "2")]
    pub header_hash: ::prost::bytes::Bytes,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct Shard {
    #[prost(uint32, tag = "1")]
    pub shard_id: u32,
}
/// SignRate is used to keep the number of success and failed signings
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SignRate {
    #[prost(uint32, tag = "1")]
    pub num_success: u32,
    #[prost(uint32, tag = "2")]
    pub num_failure: u32,
}
/// PeerAccountData represents the data that defines the PeerAccount
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerAccountData {
    #[prost(bytes = "bytes", tag = "1")]
    pub bls_public_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub shard_id: u32,
    #[prost(message, optional, tag = "4")]
    pub validator_success_rate: ::core::option::Option<SignRate>,
    #[prost(message, optional, tag = "5")]
    pub leader_success_rate: ::core::option::Option<SignRate>,
    #[prost(uint32, tag = "6")]
    pub validator_ignored_signatures_rate: u32,
    #[prost(uint32, tag = "7")]
    pub rating: u32,
    #[prost(uint32, tag = "8")]
    pub temp_rating: u32,
    #[prost(bytes = "bytes", tag = "9")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "10")]
    pub num_selected_in_success_blocks: u32,
    #[prost(uint32, tag = "11")]
    pub index_in_list: u32,
    #[prost(string, tag = "12")]
    pub list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "13")]
    pub consecutive_proposer_misses: u32,
    #[prost(message, optional, tag = "14")]
    pub total_validator_success_rate: ::core::option::Option<SignRate>,
    #[prost(message, optional, tag = "15")]
    pub total_leader_success_rate: ::core::option::Option<SignRate>,
    #[prost(uint32, tag = "16")]
    pub total_validator_ignored_signatures_rate: u32,
    #[prost(uint64, tag = "17")]
    pub nonce: u64,
    #[prost(uint32, tag = "18")]
    pub un_staked_epoch: u32,
    #[prost(string, tag = "19")]
    pub previous_list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "20")]
    pub previous_index_in_list: u32,
}
/// PeerShard represents the data regarding a peer's shard
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct PeerShard {
    #[prost(string, tag = "1")]
    pub shard_id: ::prost::alloc::string::String,
}
/// ProcessedBlock is used to store nonce of the latest processed block
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ProcessedBlockNonce {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
}
/// RequestData holds the requested data
/// This struct will be serialized and sent to the other peers
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct RequestData {
    #[prost(enumeration = "RequestDataType", tag = "1")]
    pub r#type: i32,
    #[prost(bytes = "bytes", tag = "2")]
    pub value: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub epoch: u32,
    #[prost(uint32, tag = "4")]
    pub chunk_index: u32,
}
/// RequestDataType represents the data type for the requested data
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum RequestDataType {
    /// Invalid
    InvalidType = 0,
    /// HashType indicates that the request data object is of type hash
    HashType = 1,
    /// HashArrayType that the request data object contains a serialised array of hashes
    HashArrayType = 2,
    /// NonceType indicates that the request data object is of type nonce (uint64)
    NonceType = 3,
    /// EpochType indicates that the request data object is of type epoch
    EpochType = 4,
    /// ChunkType indicates that the request data object is of type chunk
    ChunkType = 5,
}
impl RequestDataType {
    /// String value of the enum field names used in the ProtoBuf definition.
    ///
    /// The values are not transformed in any way and thus are considered stable
    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
    pub fn as_str_name(&self) -> &'static str {
        match self {
            Self::InvalidType => "InvalidType",
            Self::HashType => "HashType",
            Self::HashArrayType => "HashArrayType",
            Self::NonceType => "NonceType",
            Self::EpochType => "EpochType",
            Self::ChunkType => "ChunkType",
        }
    }
    /// Creates an enum from field names used in the ProtoBuf definition.
    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
        match value {
            "InvalidType" => Some(Self::InvalidType),
            "HashType" => Some(Self::HashType),
            "HashArrayType" => Some(Self::HashArrayType),
            "NonceType" => Some(Self::NonceType),
            "EpochType" => Some(Self::EpochType),
            "ChunkType" => Some(Self::ChunkType),
            _ => None,
        }
    }
}
/// ScrHashesAndEpoch is used to store smart contract results and epoch
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ScResultsHashesAndEpoch {
    #[prost(uint32, tag = "1")]
    pub epoch: u32,
    #[prost(bytes = "bytes", repeated, tag = "2")]
    pub sc_results_hashes: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
/// ResultsHashesByTxHash is used to store smart contract results hashes and receipt hash for a transaction hash
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ResultsHashesByTxHash {
    #[prost(bytes = "bytes", tag = "1")]
    pub receipts_hash: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "2")]
    pub sc_results_hashes_and_epoch: ::prost::alloc::vec::Vec<ScResultsHashesAndEpoch>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct GasAndFees {
    #[prost(bytes = "bytes", tag = "1")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub developer_fees: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "3")]
    pub gas_provided: u64,
    #[prost(uint64, tag = "4")]
    pub gas_penalized: u64,
    #[prost(uint64, tag = "5")]
    pub gas_refunded: u64,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ScheduledScRs {
    #[prost(bytes = "bytes", tag = "1")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(message, repeated, tag = "2")]
    pub scrs: ::prost::alloc::vec::Vec<SmartContractResult>,
    #[prost(message, repeated, tag = "3")]
    pub invalid_transactions: ::prost::alloc::vec::Vec<Transaction>,
    #[prost(message, repeated, tag = "4")]
    pub scheduled_mini_blocks: ::prost::alloc::vec::Vec<MiniBlock>,
    #[prost(message, optional, tag = "5")]
    pub gas_and_fees: ::core::option::Option<GasAndFees>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StakedDataV10 {
    #[prost(uint64, tag = "1")]
    pub register_nonce: u64,
    #[prost(uint64, tag = "2")]
    pub staked_nonce: u64,
    #[prost(bool, tag = "3")]
    pub staked: bool,
    #[prost(uint64, tag = "4")]
    pub un_staked_nonce: u64,
    #[prost(uint32, tag = "5")]
    pub un_staked_epoch: u32,
    #[prost(bytes = "bytes", tag = "6")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub stake_value: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "8")]
    pub jailed_round: u64,
    #[prost(uint64, tag = "9")]
    pub jailed_nonce: u64,
    #[prost(uint64, tag = "10")]
    pub un_jailed_nonce: u64,
    #[prost(bool, tag = "11")]
    pub jailed: bool,
    #[prost(bool, tag = "12")]
    pub waiting: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StakedDataV11 {
    #[prost(uint64, tag = "1")]
    pub register_nonce: u64,
    #[prost(uint64, tag = "2")]
    pub staked_nonce: u64,
    #[prost(bool, tag = "3")]
    pub staked: bool,
    #[prost(uint64, tag = "4")]
    pub un_staked_nonce: u64,
    #[prost(uint32, tag = "5")]
    pub un_staked_epoch: u32,
    #[prost(bytes = "bytes", tag = "6")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub stake_value: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "8")]
    pub jailed_round: u64,
    #[prost(uint64, tag = "9")]
    pub jailed_nonce: u64,
    #[prost(uint64, tag = "10")]
    pub un_jailed_nonce: u64,
    #[prost(bool, tag = "11")]
    pub jailed: bool,
    #[prost(bool, tag = "12")]
    pub waiting: bool,
    #[prost(uint32, tag = "13")]
    pub num_jailed: u32,
    #[prost(bytes = "bytes", tag = "14")]
    pub slash_value: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StakedDataV20 {
    #[prost(uint64, tag = "1")]
    pub register_nonce: u64,
    #[prost(uint64, tag = "2")]
    pub staked_nonce: u64,
    #[prost(bool, tag = "3")]
    pub staked: bool,
    #[prost(uint64, tag = "4")]
    pub un_staked_nonce: u64,
    #[prost(uint32, tag = "5")]
    pub un_staked_epoch: u32,
    #[prost(bytes = "bytes", tag = "6")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub stake_value: ::prost::bytes::Bytes,
    #[prost(uint64, tag = "8")]
    pub jailed_round: u64,
    #[prost(uint64, tag = "9")]
    pub jailed_nonce: u64,
    #[prost(uint64, tag = "10")]
    pub un_jailed_nonce: u64,
    #[prost(bool, tag = "11")]
    pub jailed: bool,
    #[prost(bool, tag = "12")]
    pub waiting: bool,
    #[prost(uint32, tag = "13")]
    pub num_jailed: u32,
    #[prost(bytes = "bytes", tag = "14")]
    pub slash_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "15")]
    pub owner_address: ::prost::bytes::Bytes,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
pub struct StakingNodesConfig {
    #[prost(int64, tag = "1")]
    pub min_num_nodes: i64,
    #[prost(int64, tag = "2")]
    pub max_num_nodes: i64,
    #[prost(int64, tag = "3")]
    pub staked_nodes: i64,
    #[prost(int64, tag = "4")]
    pub jailed_nodes: i64,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ElementInList {
    #[prost(bytes = "bytes", tag = "1")]
    pub bls_public_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub previous_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub next_key: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WaitingList {
    #[prost(bytes = "bytes", tag = "1")]
    pub first_key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub last_key: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub length: u32,
    #[prost(bytes = "bytes", tag = "4")]
    pub last_jailed_key: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UserAccountData {
    #[prost(uint64, tag = "1")]
    pub nonce: u64,
    #[prost(bytes = "bytes", tag = "2")]
    pub balance: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub code_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub root_hash: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub developer_reward: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "7")]
    pub owner_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "8")]
    pub user_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "9")]
    pub code_metadata: ::prost::bytes::Bytes,
}
/// SupplyESDT is used to store information a shard esdt token supply
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct SupplyEsdt {
    #[prost(bytes = "bytes", tag = "1")]
    pub supply: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub burned: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub minted: ::prost::bytes::Bytes,
    #[prost(bool, tag = "4")]
    pub recomputed_supply: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct TopicMessage {
    #[prost(uint32, tag = "1")]
    pub version: u32,
    #[prost(bytes = "bytes", tag = "2")]
    pub payload: ::prost::bytes::Bytes,
    #[prost(int64, tag = "3")]
    pub timestamp: i64,
    #[prost(bytes = "bytes", tag = "4")]
    pub pk: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub signature_on_pid: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CollapsedBn {
    #[prost(bytes = "bytes", repeated, tag = "1")]
    pub encoded_children: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(bytes = "bytes", tag = "2")]
    pub children_version: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CollapsedEn {
    #[prost(bytes = "bytes", tag = "1")]
    pub key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub encoded_child: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub child_version: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct CollapsedLn {
    #[prost(bytes = "bytes", tag = "1")]
    pub key: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub value: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub version: u32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ShardTriggerRegistry {
    #[prost(bool, tag = "1")]
    pub is_epoch_start: bool,
    #[prost(bool, tag = "2")]
    pub new_epoch_header_received: bool,
    #[prost(uint32, tag = "3")]
    pub epoch: u32,
    #[prost(uint32, tag = "4")]
    pub meta_epoch: u32,
    #[prost(int64, tag = "5")]
    pub current_round_index: i64,
    #[prost(uint64, tag = "6")]
    pub epoch_start_round: u64,
    #[prost(uint64, tag = "7")]
    pub epoch_finality_attesting_round: u64,
    #[prost(bytes = "bytes", tag = "8")]
    pub epoch_meta_block_hash: ::prost::bytes::Bytes,
    #[prost(message, optional, tag = "9")]
    pub epoch_start_shard_header: ::core::option::Option<Header>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ShardTriggerRegistryV2 {
    #[prost(message, optional, tag = "1")]
    pub epoch_start_shard_header: ::core::option::Option<HeaderV2>,
    #[prost(bool, tag = "2")]
    pub is_epoch_start: bool,
    #[prost(bool, tag = "3")]
    pub new_epoch_header_received: bool,
    #[prost(uint32, tag = "4")]
    pub epoch: u32,
    #[prost(uint32, tag = "5")]
    pub meta_epoch: u32,
    #[prost(int64, tag = "6")]
    pub current_round_index: i64,
    #[prost(uint64, tag = "7")]
    pub epoch_start_round: u64,
    #[prost(uint64, tag = "8")]
    pub epoch_finality_attesting_round: u64,
    #[prost(bytes = "bytes", tag = "9")]
    pub epoch_meta_block_hash: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ShardTriggerRegistryV3 {
    #[prost(message, optional, tag = "1")]
    pub epoch_start_shard_header: ::core::option::Option<HeaderV3>,
    #[prost(bool, tag = "2")]
    pub is_epoch_start: bool,
    #[prost(bool, tag = "3")]
    pub new_epoch_header_received: bool,
    #[prost(uint32, tag = "4")]
    pub epoch: u32,
    #[prost(uint32, tag = "5")]
    pub meta_epoch: u32,
    #[prost(int64, tag = "6")]
    pub current_round_index: i64,
    #[prost(uint64, tag = "7")]
    pub epoch_start_round: u64,
    #[prost(uint64, tag = "8")]
    pub epoch_finality_attesting_round: u64,
    #[prost(bytes = "bytes", tag = "9")]
    pub epoch_meta_block_hash: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MetaTriggerRegistry {
    #[prost(uint32, tag = "1")]
    pub epoch: u32,
    #[prost(uint64, tag = "2")]
    pub current_round: u64,
    #[prost(uint64, tag = "3")]
    pub epoch_finality_attesting_round: u64,
    #[prost(uint64, tag = "4")]
    pub curr_epoch_start_round: u64,
    #[prost(uint64, tag = "5")]
    pub prev_epoch_start_round: u64,
    #[prost(bytes = "bytes", tag = "6")]
    pub epoch_start_meta_hash: ::prost::bytes::Bytes,
    #[prost(message, optional, tag = "7")]
    pub epoch_start_meta: ::core::option::Option<MetaBlock>,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct MetaTriggerRegistryV3 {
    #[prost(uint32, tag = "1")]
    pub epoch: u32,
    #[prost(uint64, tag = "2")]
    pub current_round: u64,
    #[prost(uint64, tag = "3")]
    pub epoch_finality_attesting_round: u64,
    #[prost(uint64, tag = "4")]
    pub curr_epoch_start_round: u64,
    #[prost(uint64, tag = "5")]
    pub prev_epoch_start_round: u64,
    #[prost(bytes = "bytes", tag = "6")]
    pub epoch_start_meta_hash: ::prost::bytes::Bytes,
    #[prost(bool, tag = "7")]
    pub epoch_change_proposed: bool,
    #[prost(message, optional, tag = "8")]
    pub epoch_start_meta: ::core::option::Option<MetaBlockV3>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ValidatorDataV1 {
    #[prost(uint64, tag = "1")]
    pub register_nonce: u64,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(bytes = "bytes", tag = "3")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub total_stake_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub locked_stake: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub max_stake_per_node: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "7")]
    pub bls_pub_keys: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "8")]
    pub num_registered: u32,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct UnstakedValue {
    #[prost(uint32, tag = "1")]
    pub unstaked_epoch: u32,
    #[prost(bytes = "bytes", tag = "2")]
    pub unstaked_value: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorDataV2 {
    #[prost(uint64, tag = "1")]
    pub register_nonce: u64,
    #[prost(uint32, tag = "2")]
    pub epoch: u32,
    #[prost(bytes = "bytes", tag = "3")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub total_stake_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub locked_stake: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "6")]
    pub max_stake_per_node: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "7")]
    pub bls_pub_keys: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
    #[prost(uint32, tag = "8")]
    pub num_registered: u32,
    #[prost(message, repeated, tag = "9")]
    pub unstaked_info: ::prost::alloc::vec::Vec<UnstakedValue>,
    #[prost(bytes = "bytes", tag = "10")]
    pub total_unstaked: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "11")]
    pub total_slashed: ::prost::bytes::Bytes,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ValidatorConfig {
    #[prost(bytes = "bytes", tag = "1")]
    pub min_stake_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub total_supply: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub min_step: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub node_price: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "5")]
    pub un_jail_price: ::prost::bytes::Bytes,
}
/// ValidatorInfo represents the data regarding a validator that is verified by the metaNodes
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorInfo {
    #[prost(bytes = "bytes", tag = "1")]
    pub public_key: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub shard_id: u32,
    #[prost(string, tag = "3")]
    pub list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "4")]
    pub index: u32,
    #[prost(uint32, tag = "5")]
    pub temp_rating: u32,
    #[prost(uint32, tag = "6")]
    pub rating: u32,
    #[prost(float, tag = "7")]
    pub rating_modifier: f32,
    #[prost(bytes = "bytes", tag = "8")]
    pub reward_address: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "9")]
    pub leader_success: u32,
    #[prost(uint32, tag = "10")]
    pub leader_failure: u32,
    #[prost(uint32, tag = "11")]
    pub validator_success: u32,
    #[prost(uint32, tag = "12")]
    pub validator_failure: u32,
    #[prost(uint32, tag = "13")]
    pub validator_ignored_signatures: u32,
    #[prost(uint32, tag = "14")]
    pub num_selected_in_success_blocks: u32,
    #[prost(bytes = "bytes", tag = "15")]
    pub accumulated_fees: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "16")]
    pub total_leader_success: u32,
    #[prost(uint32, tag = "17")]
    pub total_leader_failure: u32,
    #[prost(uint32, tag = "18")]
    pub total_validator_success: u32,
    #[prost(uint32, tag = "19")]
    pub total_validator_failure: u32,
    #[prost(uint32, tag = "20")]
    pub total_validator_ignored_signatures: u32,
    #[prost(string, tag = "21")]
    pub previous_list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "22")]
    pub previous_index: u32,
}
/// ShardValidatorInfo represents the data regarding a validator that is stored in the PeerMiniblocks
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct ShardValidatorInfo {
    #[prost(bytes = "bytes", tag = "1")]
    pub public_key: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "2")]
    pub shard_id: u32,
    #[prost(string, tag = "3")]
    pub list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "4")]
    pub index: u32,
    #[prost(uint32, tag = "5")]
    pub temp_rating: u32,
    #[prost(string, tag = "6")]
    pub previous_list: ::prost::alloc::string::String,
    #[prost(uint32, tag = "7")]
    pub previous_index: u32,
}
/// ValidatorStatistics holds information about a validator
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct ValidatorStatistics {
    #[prost(float, tag = "1")]
    pub temp_rating: f32,
    #[prost(uint32, tag = "2")]
    pub num_leader_success: u32,
    #[prost(uint32, tag = "3")]
    pub num_leader_failure: u32,
    #[prost(uint32, tag = "4")]
    pub num_validator_success: u32,
    #[prost(uint32, tag = "5")]
    pub num_validator_failure: u32,
    #[prost(uint32, tag = "6")]
    pub num_validator_ignored_signatures: u32,
    #[prost(float, tag = "7")]
    pub rating: f32,
    #[prost(float, tag = "8")]
    pub rating_modifier: f32,
    #[prost(uint32, tag = "9")]
    pub total_num_leader_success: u32,
    #[prost(uint32, tag = "10")]
    pub total_num_leader_failure: u32,
    #[prost(uint32, tag = "11")]
    pub total_num_validator_success: u32,
    #[prost(uint32, tag = "12")]
    pub total_num_validator_failure: u32,
    #[prost(uint32, tag = "13")]
    pub total_num_validator_ignored_signatures: u32,
    #[prost(uint32, tag = "14")]
    pub shard_id: u32,
    #[prost(string, tag = "15")]
    pub validator_status: ::prost::alloc::string::String,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EsdtDataV1 {
    #[prost(bytes = "bytes", tag = "1")]
    pub owner_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub token_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub ticker_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub token_type: ::prost::bytes::Bytes,
    #[prost(bool, tag = "5")]
    pub mintable: bool,
    #[prost(bool, tag = "6")]
    pub burnable: bool,
    #[prost(bool, tag = "7")]
    pub can_pause: bool,
    #[prost(bool, tag = "8")]
    pub can_freeze: bool,
    #[prost(bool, tag = "9")]
    pub can_wipe: bool,
    #[prost(bool, tag = "10")]
    pub upgradable: bool,
    #[prost(bool, tag = "11")]
    pub can_change_owner: bool,
    #[prost(bool, tag = "12")]
    pub is_paused: bool,
    #[prost(bytes = "bytes", tag = "13")]
    pub minted_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "14")]
    pub burnt_value: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "15")]
    pub num_decimals: u32,
    #[prost(bool, tag = "16")]
    pub can_add_special_roles: bool,
    #[prost(bool, tag = "17")]
    pub nft_create_stopped: bool,
    #[prost(bool, tag = "18")]
    pub can_transfer_nft_create_role: bool,
    #[prost(message, repeated, tag = "19")]
    pub special_roles: ::prost::alloc::vec::Vec<EsdtRoles>,
    #[prost(uint32, tag = "20")]
    pub num_wiped: u32,
}
#[derive(Clone, PartialEq, ::prost::Message)]
pub struct EsdtDataV2 {
    #[prost(bytes = "bytes", tag = "1")]
    pub owner_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub token_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "3")]
    pub ticker_name: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "4")]
    pub token_type: ::prost::bytes::Bytes,
    #[prost(bool, tag = "5")]
    pub mintable: bool,
    #[prost(bool, tag = "6")]
    pub burnable: bool,
    #[prost(bool, tag = "7")]
    pub can_pause: bool,
    #[prost(bool, tag = "8")]
    pub can_freeze: bool,
    #[prost(bool, tag = "9")]
    pub can_wipe: bool,
    #[prost(bool, tag = "10")]
    pub upgradable: bool,
    #[prost(bool, tag = "11")]
    pub can_change_owner: bool,
    #[prost(bool, tag = "12")]
    pub is_paused: bool,
    #[prost(bytes = "bytes", tag = "13")]
    pub minted_value: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "14")]
    pub burnt_value: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "15")]
    pub num_decimals: u32,
    #[prost(bool, tag = "16")]
    pub can_add_special_roles: bool,
    #[prost(bool, tag = "17")]
    pub nft_create_stopped: bool,
    #[prost(bool, tag = "18")]
    pub can_transfer_nft_create_role: bool,
    #[prost(message, repeated, tag = "19")]
    pub special_roles: ::prost::alloc::vec::Vec<EsdtRoles>,
    #[prost(uint32, tag = "20")]
    pub num_wiped: u32,
    #[prost(bool, tag = "21")]
    pub can_create_multi_shard: bool,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EsdtRoles {
    #[prost(bytes = "bytes", tag = "1")]
    pub address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", repeated, tag = "2")]
    pub roles: ::prost::alloc::vec::Vec<::prost::bytes::Bytes>,
}
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct EsdtConfig {
    #[prost(bytes = "bytes", tag = "1")]
    pub owner_address: ::prost::bytes::Bytes,
    #[prost(bytes = "bytes", tag = "2")]
    pub base_issuing_cost: ::prost::bytes::Bytes,
    #[prost(uint32, tag = "3")]
    pub min_token_name_length: u32,
    #[prost(uint32, tag = "4")]
    pub max_token_name_length: u32,
}
/// WsMessage contains all the information needed for a WebSocket message
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct WsMessage {
    #[prost(bool, tag = "1")]
    pub with_acknowledge: bool,
    #[prost(uint64, tag = "2")]
    pub counter: u64,
    #[prost(int32, tag = "3")]
    pub r#type: i32,
    #[prost(bytes = "bytes", tag = "4")]
    pub payload: ::prost::bytes::Bytes,
    #[prost(string, tag = "5")]
    pub topic: ::prost::alloc::string::String,
    #[prost(uint32, tag = "6")]
    pub version: u32,
}
