use agglayer_primitives::Signature;
use serde::{Deserialize, Serialize};
pub use unified_bridge::AggchainProofPublicValues;
use crate::Digest;
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary, Eq, PartialEq))]
#[serde(untagged)]
pub enum AggchainData {
ECDSA {
signature: Signature,
},
Generic {
proof: Proof,
aggchain_params: Digest,
signature: Option<Box<Signature>>,
public_values: Option<Box<AggchainProofPublicValues>>,
},
MultisigOnly {
multisig: MultisigPayload,
},
MultisigAndAggchainProof {
multisig: MultisigPayload,
aggchain_proof: AggchainProof,
},
}
#[derive(Debug, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary, Eq, PartialEq))]
pub struct MultisigPayload(pub Vec<Option<Signature>>);
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary, Eq, PartialEq))]
pub struct AggchainProof {
pub proof: Proof,
pub aggchain_params: Digest,
pub public_values: Option<Box<AggchainProofPublicValues>>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary, Eq, PartialEq))]
pub struct SP1StarkWithContext {
pub proof: Vec<u8>,
pub vkey: Vec<u8>,
pub version: String,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary, Eq, PartialEq))]
pub enum Proof {
SP1Stark(SP1StarkWithContext),
}
#[cfg(test)]
mod test;