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, StateRoot> {
pub initial_state_root: StateRoot,
pub da_block_hash: Da::SlotHash,
pub post_state_root: StateRoot,
pub proof_of_bond: ProofOfBond<StateProof>,
}
#[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, BorshDeserialize, Serialize, Deserialize)]
pub struct ChallengeContents<Address, Da: DaSpec, Root> {
pub challenger_address: Address,
pub state_transition: StateTransition<Da, Address, Root>,
}
#[derive(Debug, Clone, PartialEq, Eq, BorshSerialize, Serialize, Deserialize)]
pub struct Challenge<'a>(&'a [u8]);