use borsh::{BorshDeserialize, BorshSerialize};
use serde::{Deserialize, Serialize};
use crate::da::DaSpec;
use crate::zk::StateTransition;
#[derive(
Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize, Serialize, Deserialize, Default,
)]
pub struct ProofOfBond<StateProof> {
pub claimed_transition_num: u64,
pub proof: StateProof,
}
#[derive(
Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize, Serialize, Deserialize, Default,
)]
pub struct Attestation<Da: DaSpec, StateProof> {
pub initial_state_root: [u8; 32],
pub da_block_hash: Da::SlotHash,
pub post_state_root: [u8; 32],
pub proof_of_bond: ProofOfBond<StateProof>,
}
#[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize, Serialize, Deserialize)]
pub struct ChallengeContents<Address, Da: DaSpec> {
pub challenger_address: Address,
pub state_transition: StateTransition<Da, Address>,
}
#[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, Serialize, Deserialize)]
pub struct Challenge<'a>(&'a [u8]);