#![cfg_attr(not(feature = "std"), no_std)]
#![allow(clippy::all)]
#![deny(missing_docs)]
use codec::{Decode, Encode};
use polkadot_sdk::*;
use sp_consensus_beefy::mmr::{BeefyAuthoritySet, MmrLeaf, MmrLeafVersion};
use sp_core::H256;
use sp_std::prelude::*;
#[derive(sp_std::fmt::Debug, Encode, Decode, PartialEq, Eq, Clone)]
pub struct ConsensusState {
pub latest_beefy_height: u32,
pub beefy_activation_block: u32,
pub mmr_root_hash: H256,
pub current_authorities: BeefyAuthoritySet<H256>,
pub next_authorities: BeefyAuthoritySet<H256>,
}
pub const HASH_LENGTH: usize = 32;
pub type TSignature = [u8; 65];
pub type Hash = [u8; 32];
#[derive(Clone, sp_std::fmt::Debug, PartialEq, Eq, Encode, Decode)]
pub struct SignatureWithAuthorityIndex {
pub signature: TSignature,
pub index: u32,
}
#[derive(Clone, sp_std::fmt::Debug, PartialEq, Eq, Encode, Decode)]
pub struct SignedCommitment {
pub commitment: sp_consensus_beefy::Commitment<u32>,
pub signatures: Vec<SignatureWithAuthorityIndex>,
}
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct MmrProof {
pub signed_commitment: SignedCommitment,
pub latest_mmr_leaf: MmrLeaf<u32, H256, H256, H256>,
pub mmr_proof: sp_mmr_primitives::LeafProof<H256>,
pub authority_proof: Vec<[u8; 32]>,
}
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct PartialMmrLeaf {
pub version: MmrLeafVersion,
pub parent_number_and_hash: (u32, H256),
pub beefy_next_authority_set: BeefyAuthoritySet<H256>,
}
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct ParachainHeader {
pub header: Vec<u8>,
pub index: u32,
pub para_id: u32,
}
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct ParachainProof {
pub parachains: Vec<ParachainHeader>,
pub proof: Vec<[u8; 32]>,
pub total_leaves: u32,
}
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct ConsensusMessage {
pub parachain: ParachainProof,
pub mmr: MmrProof,
}
pub const PROOF_TYPE_NAIVE: u8 = 0x00;
pub const PROOF_TYPE_SP1: u8 = 0x01;
#[derive(sp_std::fmt::Debug, Clone, PartialEq, Eq, Encode, Decode)]
pub struct Sp1BeefyProof {
pub block_number: u32,
pub validator_set_id: u64,
pub mmr_leaf: MmrLeaf<u32, H256, H256, H256>,
pub headers: Vec<ParachainHeader>,
pub proof: Vec<u8>,
pub nonce: H256,
}
#[cfg(feature = "std")]
#[derive(Clone, serde::Serialize, serde::Deserialize)]
pub struct EncodedVersionedFinalityProof(pub sp_core::Bytes);